我使用Type.GetMethods(BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic)
来检索给定类型的方法数组。
问题是返回的MethodInfo
可能包含由我不想要的编译器生成的方法。例如:
属性bool Enabled { get; }
会
得到bool get_Enabled()
事件SomethingChanged
将会获得
add_SomethingChanged(EventHandler)
和
remove_SomethingChanged(EventHandler)
我可以添加一些过滤器逻辑来摆脱它们,这可能会变得非常复杂。我想知道我能做些什么,例如使用BindingFlags
设置,只检索用户定义的方法?
答案 0 :(得分:26)
typeof(MyType)
.GetMethods(BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic)
.Where(m => !m.IsSpecialName)
答案 1 :(得分:2)
我认为您最好的选择是过滤掉具有CompilerGenerated
属性的方法。这可能更具有前瞻性,尽管这并不能解释假设的未来编译器完全不尊重这一属性。 IsSpecialName
测试可能还需要 ,因为看起来好像C#编译器没有将属性附加到事件add
和remove
方法。
答案 2 :(得分:-2)
秘密是BindingFlags。 DeclaredOnly
unwanted_words = ['hello', 'random']
samp_data = samp_data[~samp_data.b.str.contains('|'.join(unwanted_words))]