質問

Actionを使用して、そのメソッドの名前を含む文字列値に基づいてメソッドを呼び出す方法はありますか?

役に立ちましたか?

解決

Action< T> は、特定のメソッドを指すことができるデリゲート型です。文字列変数に保存された実行時にのみ名前がわかるメソッドを呼び出したい場合、リフレクションを使用する必要があります:

class Program
{
    static void Main(string[] args)
    {
        string nameOfTheMethodToCall = "Test";
        typeof(Program).InvokeMember(
            nameOfTheMethodToCall, 
            BindingFlags.NonPublic | BindingFlags.InvokeMethod | BindingFlags.Static, 
            null, 
            null, 
            null);
    }

    static void Test()
    {
        Console.WriteLine("Hello from Test method");
    }
}

@Andrewが示唆するように、Delegate.CreateDelegateを使用してMethodInfoからデリゲートタイプを作成できます。

class Program
{
    static void Main(string[] args)
    {
        string nameOfTheMethodToCall = "Test";
        var mi = typeof(Program).GetMethod(nameOfTheMethodToCall, BindingFlags.NonPublic | BindingFlags.InvokeMethod | BindingFlags.Static);
        var del = (Action)Delegate.CreateDelegate(typeof(Action), mi);
        del();
    }

    static void Test()
    {
        Console.WriteLine("Hello from Test method");
    }
}

他のヒント

実際には Action< T> に通常のメソッドだけが必要だとは思わない。

public void CallMethod<T>(T instance, string methodName) { 
    MethodInfo method = typeof(T).GetMethod(methodName);
    if (method != null) {
        method.Invoke(instance, null);
    }
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top