1

コンパイルされた式の作成を呼び出すときに、結果のコンパイルされたデリゲートで CreateDelegate を呼び出そうとしていますが、NotSupportedException を取得しています。説明は次のとおりです。派生クラスは実装を提供する必要があります。コンパイル済みメソッドのデリゲートを作成するにはどうすればよいですか?

public delegate int AddOne(int input);

void Main()
{
    var input = Expression.Parameter(typeof(int));
    var add = Expression.Add(input,Expression.Constant(1));
    var lambda = Expression.Lambda(typeof(AddOne),add,input);
    var compiled = (AddOne)lambda.Compile();
    compiled.Method.CreateDelegate(typeof(AddOne));
}
4

1 に答える 1

3

電話する必要はありませんCreateDelegatelambda.Compile結果をtoにキャストするAddOneだけで十分です。

観察:

public delegate int AddOne(int input);

public int Test(AddOne f)
{
   return f(1);
}

void Main()
{
    var input = Expression.Parameter(typeof(int));
    var add = Expression.Add(input,Expression.Constant(1));
    var lambda = Expression.Lambda(typeof(AddOne),add,input);
    var compiled = (AddOne)lambda.Compile();
    Console.WriteLine(Test(compiled)); // 2
}

Testタイプのデリゲートを受け入れるメソッドを正常に呼び出すことができますAddOne

于 2013-09-26T19:41:37.080 に答える