1. ホーム
  2. c#

[解決済み] C#でメソッドをパラメータとして渡す

2022-03-19 02:05:33

質問

パラメータ型と戻り値は同じだが、名前とブロックが異なる複数のメソッドがあります。実行するメソッドの名前を別のメソッドに渡して、渡されたメソッドを呼び出したいのですが、どうすればよいですか?

public int Method1(string)
{
    // Do something
    return myInt;
}

public int Method2(string)
{
    // Do something different
    return myInt;
}

public bool RunTheMethod([Method Name passed in here] myMethodName)
{
    // Do stuff
    int i = myMethodName("My String");
    // Do more stuff
    return true;
}

public bool Test()
{
    return RunTheMethod(Method1);
}

このコードは動作しませんが、これは私がやろうとしていることです。 私が理解していないのは、パラメータを定義する必要があるため、RunTheMethodのコードをどのように書くかということです。

解決方法は?

.net 3.5のFuncデリゲートは、RunTheMethodメソッドのパラメータとして使用することができます。Funcデリゲートは、特定の型の引数をいくつも取り、特定の型の引数を1つだけ返すメソッドを指定することができるのです。以下は、動作するはずの例です。

public class Class1
{
    public int Method1(string input)
    {
        //... do something
        return 0;
    }

    public int Method2(string input)
    {
        //... do something different
        return 1;
    }

    public bool RunTheMethod(Func<string, int> myMethodName)
    {
        //... do stuff
        int i = myMethodName("My String");
        //... do more stuff
        return true;
    }

    public bool Test()
    {
        return RunTheMethod(Method1);
    }
}