有没有办法使用反射来获取类中的私有静态方法,而不会在这些方法中定义任何本地函数?
例如,我有一个类似的课程:
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();
答案 0 :(得分:1)
怎么样:
var methods = typeof(Foo).GetMethods(BindingFlags.Static | BindingFlags.NonPublic)
.Where(x => !x.IsAssembly)
.Select(x => x.Name)
.ToList();
结果:
"FooMethod"
IsAssembly
财产摘要:
获取一个值,该值指示此方法或构造函数的潜在可见性 由System.Reflection.MethodAttributes.Assembly描述;也就是说,方法 或构造函数最多可见于同一程序集中的其他类型,并且是 对于程序集外部的派生类型不可见。