[英]Use Reflection to get methods excluding local functions in C# 7.0?
有沒有一種方法可以使用反射來獲取類中的私有靜態方法,而無需在這些方法中定義任何本地函數?
例如,我有一個像這樣的課程:
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();
關於什么:
var methods = typeof(Foo).GetMethods(BindingFlags.Static | BindingFlags.NonPublic)
.Where(x => !x.IsAssembly)
.Select(x => x.Name)
.ToList();
結果:
"FooMethod"
IsAssembly
屬性摘要:
獲取一個值,該值指示此方法或構造函數的潛在可見性是否由System.Reflection.MethodAttributes.Assembly描述。 也就是說,該方法或構造函數對於同一程序集中的其他類型最多是可見的,而對於程序集外部的派生類型則不可見。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.