次のように、ラムダ式でメソッドグループを使用しようとしています。
public class Foo { public void Hello(string s) { } }
void Test()
{
// this works as long as Hello has a void return type
Func<Foo, Action<string>> a = foo => foo.Hello;
}
ただし、のリターンタイプをに変更するHello
と、int
'Bar.Hello(string)'の戻りタイプが間違っています。
Func
の代わりに試してみましAction
たが、メソッドグループ構文を使用できなくなっているようです。
何か案は?
(私の目標であるfwiwは、さまざまな戻り値と多くの文字列引数を持つ多数のメソッドを参照できるようにすることです。それらを呼び出すつもりはありません。属性を反映したいだけです。安全性が気に入っています。ただし、ラムダの数は、メソッド名の文字列を入力するだけではありません。)
編集:使用したい理由を明確にするためにAction<string>
:int
私の例では、いくつかのタイプのいずれかである可能性があります。そのタイプをテンプレート化してみました-
void Set<T>(Func<Foo, Func<string, T>> a) { }
void Test() { Set(foo => foo.Hello); } // fails
-しかし、コンパイラは派生できませんT
(おそらく、リターンタイプでオーバーロードできないのと同じ理由で?)。
他のアイデアはありますか?この場合、コンパイラにそのメソッドグループの名前をチェックさせることができる限り、私はいくつかのクレイジーな反省に反対していません。