2017-09-24 176 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