2016-11-09 6 views
3

に私はこのような静的なリストを持っている:METHODINFOは、C#

class Program 
{ 
    public static List<Action> List { get; set; } = new List<Action>(); 
    static void Main(string[] args) 
    { 
     Test test = new Test(); 
     test.Work(); 
     var type = test.GetType(); 
     var method = type.GetMethod("Action1",System.Reflection.BindingFlags.Instance|System.Reflection.BindingFlags.NonPublic); 
     //Console.WriteLine(List.Any(p => p == new Action(method.))); 
    } 
} 
public class Test 
{ 
    public void Work() 
    { 
     Program.List.Add(new Action(Action1)); 
    } 
    private void Action1() 
    { 

    } 
} 

にはどうすればProgram.Listが反射によってアクション1を含んで判断することができますか?アクション1メソッドが公開されている場合は

することは、私は次のように行うことができます。

Console.WriteLine(List.Any(p => p == new Action(test.Action1))); 

そして、それは「真」に印刷されます。

+0

。コードを完了しておらず、実際には何もリストに追加していません。一度行うと、メソッドにmethod.Invoke()を呼び出すデリゲートが含まれていることがわかります。このInvoke()がAction1を呼び出すのは、あなたが発見できるものではないということです。 –

答えて

1

これを試してみてください:

ことはできません
Console.WriteLine(List.Any(p => p.Method.MethodHandle.Value == method.MethodHandle.Value)); 
+0

それは働いていますが、「アクション」を翻訳することはできますか?アクションインターフェースが公開されているだけでしょうか? – HaibaraAi

+0

多分Listを使用する Oswald

+0

メソッドがパラメータを持つ可能性があり、List がパラメータを持たないメソッドを格納するため、Actionが改善されると思います。 –

関連する問題