簡體   English   中英

使用Reflection獲得C#7.0中排除局部函數的方法?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM