0

関数とその所有者クラスを入力引数として取り、その名前をリフレクションで処理する必要があるメソッドがあります。もちろんstring、入力引数として s をいくつか取ることもできるので、メソッドは次のようになります。

void Proceed(string className, string methodName)
{
  Console.WriteLine($"{className}.{methodName} called");
  //...
}

次のように呼び出されます。

Proceed(nameof(Foo), nameof(Foo.Bar));

nameofしかし、メソッドを呼び出そうとするたびにキーワードを書かないようにする方法はあるのだろうか。私にとってProceed<Foo>(f => f.Bar)は、もっと素敵に見えるようなものです。

これは式で解決できると思います。私が直面している問題は、メソッドに引数がある場合、メソッドを呼び出すときにそれらを明示的に指定する必要があることです (後でメソッドの名前Barだけが必要になる私の場合、これは過剰に思えます)。

だから、私が見つけた最良の解決策はこれです:

void Proceed<T>(Expression<Func<T, Action<object, object>>> expression)
{
//...
}

それでも、それ自体の引数で引数メソッドのシグネチャを指定しているため、十分に汎用的ではありません。

引数を指定せずに関数を引数として渡す方法があるかどうか疑問に思います (nameofキーワードと同様に、後でその名前のみが必要になる場合)。

4

2 に答える 2

0

イベントまたはデリゲートの使用法を探していると思います。

これら 2 つの詳細については、オンラインで調べることができます。アイデアは、同じ引数を持ついくつかのメソッドを保存して、後で呼び出す必要がある引数の種類を知ることです。

于 2016-07-18T17:49:07.333 に答える
-1

はい、デリゲートキーワードを使用します。

答えはこちらをご覧ください。

于 2016-07-18T17:45:58.507 に答える