我有以下简单的代码:
var b = Expression.Parameter(typeof(double), "b");
var negativeB = Expression.Negate(b);
如果我停在那里并尝试快速观看Expression.Lambda(negativeB).Compile()
,我会收到错误消息:
变量' b'类型' System.Double'从范围''引用,但它 未定义
关于此错误消息的其他答案似乎并不能解决此处发生的事情,或者在这种情况下如何解决此问题。
答案 0 :(得分:3)
您应该在Lambda中指定参数(b
):
var l = Expression.Lambda(negativeB, b).Compile();
var r = l.DynamicInvoke(32); // = -32
答案 1 :(得分:3)
您的表达式negativeB
需要输入参数b
。但是,在定义Lambda时,您没有定义任何参数。
您需要做的是:
Expression.Lambda(negativeB, b).Compile();
然后编译