Expression.Lambda()出错。编译()

时间:2017-09-24 19:01:37

标签: c# linq-expressions

我有以下简单的代码:

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

如果我停在那里并尝试快速观看Expression.Lambda(negativeB).Compile(),我会收到错误消息:

  

变量' b'类型' System.Double'从范围''引用,但它   未定义

关于此错误消息的其他答案似乎并不能解决此处发生的事情,或者在这种情况下如何解决此问题。

2 个答案:

答案 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();

然后编译