2017-09-24 5 views
0

I次の簡単なコードがあります。エラー(コンパイル)

variable 'b' of type 'System.Double' referenced from scope '', but it is not defined

var b = Expression.Parameter(typeof(double), "b"); 
    var negativeB = Expression.Negate(b); 

私はそこに停止し、迅速な時計Expression.Lambda(negativeB).Compile()にしようとすると、私はエラーを取得しますこのエラーメッセージに関するその他の回答は、ここで何が起こっているのか、この場合にはどのように修正するのかについては言及していないようです。

+0

あなたはそれを強く型付けさせるために>><ダブル、ダブルラムダ<機能を使用する必要がありますコンパイルします。 DynamicInvokeのようなものは、厳密に型指定された選択肢よりも遅いオーダーです。 –

+0

@AntonínLejsek、私は何の式を入力するのかわかりません。実行時に 'Lambda >'を作成して、 'DynamicInvoke()'の代わりに 'Invoke()'を使うことはできますか? – toddmo

+0

わからない場合は、ヘルプはありません。この例から、私にはあなたが知っているように思えました。 –

答えて

3

あなたはbの入力パラメータを必要と表現negativeBを持っています。しかし、ラムダを定義しているときは、パラメータを定義していません。

は何をする必要があると、このです:

Expression.Lambda(negativeB, b).Compile(); 

これは、その後

3

あなたはラムダのパラメータ(b)を指定する必要があります

var l = Expression.Lambda(negativeB, b).Compile(); 
var r = l.DynamicInvoke(32); // = -32 
関連する問題