Filtering out auto-generated methods (getter/setter/add/remove/.etc) returned by Type.GetMethods()

c#, events, getmethod, properties, reflection

Solution

typeof(MyType)
    .GetMethods(BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic)
    .Where(m => !m.IsSpecialName)

Problem

I use `Type.GetMethods(BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic)` to retrieve an array of methods for a given type. The problem is the returned `MethodInfo` could include methods that are generated by the compiler which I don't want. For example: property `bool Enabled { get; }` will get `bool get_Enabled()` event `SomethingChanged` will get `add_SomethingChanged(EventHandler)` and `remove_SomethingChanged(EventHandler)` I can probably add some filter logic to get rid of them which could potentially get very complicated. I want to know if there is something else I can do, such as with `BindingFlags` settings, to retrieve only user defined methods?

Original source

Related problems