2017-09-24 171 views
0

我有以下簡單的代碼:錯誤編譯()

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

如果我停在那裏,並嘗試快速監視Expression.Lambda(negativeB).Compile()我得到一個錯誤:

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

關於這個錯誤信息的其他答案似乎沒有解決這裏發生的事情,或者在這種情況下如何解決它。

+0

您應該使用的λ>使它強類型。像DynamicInvoke這樣的事情比強類型的選擇要慢幾個數量級。 –

+0

@AntonínLejsek,我不知道用戶輸入什麼公式。我可以在運行時創建'Lambda >'所以我可以使用'Invoke()'而不是'DynamicInvoke()'? – toddmo

+0

如果你不知道,那麼沒有任何幫助。從我看來,你知道的例子。 –

回答

3

您有需要的b輸入參數的表達式negativeB。但是,當您定義Lambda時,您並未定義任何參數。

你需要做的是什麼:

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

這則編譯

3

應指定在lambda參數(b):

var l = Expression.Lambda(negativeB, b).Compile(); 
var r = l.DynamicInvoke(32); // = -32