残念ながら、「デリゲート」のようなものはほとんどありません。ほとんどの目的で (特に: a を解決するMethodInfo
場合)、厳密に型指定されたデリゲートである必要があります。これはメソッドでGetData
はなく、メソッド グループであるためです。メソッドを正確に指定するか、既知のデリゲート型を持っている必要があります (最終的には同じことを行います)。
2 つの実用的なオプションがあります。に作業するobject
か、ジェネリックを追加します。例えば:
void Method<TObjectType>(Expression<Func<TObjectType,object>> ex) {...}
次のように機能します。
void Method<TObjectType, TValue>(Expression<Func<TObjectType,TValue>> ex) {...}
呼び出し元は次を使用します。
Method<Foo>(x => x.GetData());
本当にデリゲートを使用したい場合は、次のように型が予測可能である必要があります。
void Method<TObjectType>(Expression<Func<TObjectType,Func<int>>> ex)
許可:
Method<Foo>(x => x.GetData);
または、(たとえば) メソッドが常にパラメーターなしであることがわかっているが、戻り値の型がわからない場合。たぶん次のようなもの:
void Method<TObjectType, TValue>(Expression<Func<TObjectType,Func<TValue>>> ex)
これにより、次のことが可能になります。
Method<Foo, int>(x => x.GetData);