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

前端 未结 3 1779
深忆病人
深忆病人 2020-12-18 20:40

I use Type.GetMethods(BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic) to retrieve an array of methods for a given ty

相关标签:
3条回答
  • 2020-12-18 20:40

    I think your best bet would be to filter out methods that have the CompilerGenerated attribute. This is likely to be more future-proof, although that doesn't account for hypothetical future compilers disrespecting this attribute entirely. The IsSpecialName test is probably also required since it appears as though the C# compiler does not attach the attribute to event add and remove methods.

    0 讨论(0)
  • 2020-12-18 20:54
    typeof(MyType)
        .GetMethods(BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic)
        .Where(m => !m.IsSpecialName)
    
    0 讨论(0)
  • 2020-12-18 21:01

    The secret is BindingFlags.DeclaredOnly

    typeof(MyType).GetMethods(BindingFlags.Instance | BindingFlags.Public | BindingFlags.DeclaredOnly)
    
    0 讨论(0)
提交回复
热议问题