6

Func を次のように定義したとします。

Func<MyClass, object> f = o => o.StringProperty;

また

Func<MyClass, object> f = o => o.Property.SomeMethod();

具体的に呼び出さずに実際の戻り値の型を取得する方法はありますか?

4

3 に答える 3

5

次のように戻り値の型を取得できます。

f.Method.ReturnType

しかし、これは type を返しますobjectMethodまたはStringまたは から派生したものを取得したい場合objectは、メソッドを呼び出さない限り情報を取得できません。

実際には可能ですが、これは、メソッド コアを逆アセンブルしてから分析し、メソッドが何を返すことができるかを確認する必要があることを意味します。しかし、それでも、さまざまな戻り値の型が存在する可能性があります。

したがって、答えは次のとおりです。オブジェクトが返されることを知りたい場合は、そうすることができます。

于 2013-07-24T14:36:48.917 に答える
1

ジェネリック メソッドを使用して、コンパイラに型引数を推論させることで、これに近いことを行うことができます。

static Func<T1, R> Infer<T1, R>(Func<T1, R> f) { return f; }

その後:

var func = Infer((string s) => s.Length);

funcこれにより、コンパイル時に戻り値の型が の型にエンコードされます。

もちろん、より一般的に適用可能なソリューションでは、1、2、3などの引数を使用してInfer、カバーするための一連のオーバーロードが必要になります。ActionFunc

その後、実行時に戻り値の型を取得したい場合は、ppetrov がすでに指摘しているように、どのような種類でFuncも簡単です。func.Method.ReturnType

于 2013-07-24T14:36:30.953 に答える