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

一世执手 提交于 2019-11-29 09:14:57
typeof(MyType)
    .GetMethods(BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic)
    .Where(m => !m.IsSpecialName)

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.

The secret is BindingFlags.DeclaredOnly

typeof(MyType).GetMethods(BindingFlags.Instance | BindingFlags.Public | BindingFlags.DeclaredOnly)
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!