2012-02-03 5 views
7

Func<T>インスタンスを動的に作成する方法を知っていますか?Activator.CreateInstanceを使用してFuncを作成<T>インスタンス

//Create the Func type 

Type funcType = typeof(Func<>).MakeGenericType(typeof(string)); 

//How do I pass a reference to the anonymous method? 

Activator.CreateInstance(funcType,() => "test"); 

これはコンパイルされません:それは

誰でもデリゲート型でないため

object[]を入力するラムダ式を変換することができませんか?

+5

はあなたが答えのよりよいチャンスのためにそれを達成しようとしている方法を達成するためではなく、しようとしているかを説明してください。 – Jamiec

+0

私はJamiecに同意します。なぜなら、通常、式の名前空間がハードコアのリフレクションよりもこのようなシナリオで優れているからです。 – SWeko

+0

seesharperあなたはこのライトインジェクションの質問をご覧くださいできますか? http://stackoverflow.com/questions/18931955/lightinject-ioc-container-throws-stackoverflow-when-resolving-type –

答えて

1

私はあなたができるとは思わない。 This blogは、この問題を説明するための方法です。私はあなたに代替のアプローチを探すことを提案する。代わりに表現木を使用できますか?

0

System.Objectに変換できるオブジェクトが必要です。このためには、まずFunc<String>のようなデリゲートを作成する必要があります。したがって、私は実行時にFunc<T>を作成する必要はありません。

3

あなたは式ツリーを使用する必要があります。

var func = Expression.Lambda(Expression.Constant("test")).Compile(); 
var result = func.DynamicInvoke(); 
関連する問題