过滤掉Type.GetMethods()返回的自动生成的方法(getter / setter / add / remove / .etc)
我使用Type.GetMethods(BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic)
来检索给定类型的方法数组。
问题是返回的MethodInfo
可能包含由我不想要的编译器生成的方法。 例如:
-
property
bool Enabled { get; }
将得到bool get_Enabled()
-
事件
SomethingChanged
将获得add_SomethingChanged(EventHandler)
和remove_SomethingChanged(EventHandler)
我可以添加一些filter逻辑来摆脱它们,这可能会变得非常复杂。 我想知道是否还有其他我可以做的事情,例如使用BindingFlags
设置,只检索用户定义的方法?
typeof(MyType) .GetMethods(BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic) .Where(m => !m.IsSpecialName)
我认为最好的办法是过滤掉具有CompilerGenerated
属性的方法。 这可能更具有前瞻性,尽管这并不能解释假设的未来编译器完全不尊重这一属性。 可能还需要IsSpecialName
测试,因为它看起来好像C#编译器没有将属性附加到事件add
和remove
方法。
秘密是BindingFlags。 DeclaredOnly
typeof(MyType).GetMethods(BindingFlags.Instance | BindingFlags.Public | BindingFlags.DeclaredOnly)