有没有一种方法可以使用反射获取类中的私有静态方法,而不获取这些方法内定义的任何本地函数?
例如,我有一个如下所示的类:
public class Foo {
private static void FooMethod(){
void LocalFoo(){
// do local stuff
}
// do foo stuff
}
}
如果我使用反射来获取私有静态方法,代码如下:
var methods = typeof(Foo).GetMethods(BindingFlags.Static|BindingFlags.NonPublic)
.Select(m=>m.Name).ToList();
然后我得到了这样的结果:
FooMethod
<FooMethod>g__LocalFoo5_0
包括本地函数生成的复杂编译器名称。
到目前为止,我能想到的最好方法是添加一个Where子句来过滤掉本地函数,例如:
var methods = typeof(Foo).GetMethods(BindingFlags.Static|BindingFlags.NonPublic)
.Where(m=>!m.Name.Contains("<")
.Select(m=>m.Name).ToList();
或者:
var methods = typeof(Foo).GetMethods(BindingFlags.Static|BindingFlags.NonPublic)
.Where(m=>!m.Name.Contains("__")
.Select(m=>m.Name).ToList();