Expression.Lambda().Compile() 时出错

Error upon Expression.Lambda().Compile()

我有以下简单代码:

  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

关于此错误消息的其他答案似乎没有说明这里发生了什么,或者在这种情况下如何解决它。

您应该在 Lambda 中指定参数 (b):

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

您有一个表达式 negativeB,需要输入参数 b。但是,当您定义 Lambda 时,您没有定义任何参数。

你需要做的是:

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

然后编译