评估LambdaExpression?

时间:2013-11-15 23:39:32

标签: c# linq linq-expressions

我正在制作一个LINQ lambda表达式:

 Expression<Func<double, double, double>> add = (x, y) => x + y;

但现在我该如何评估它,比如找2 + 3?

3 个答案:

答案 0 :(得分:5)

这应该适合你:

var sum = add.Compile()(2,3);

在某些情况下,Expression没有通用类型,您必须使用DynamicInvoke来执行它,因为Compile()会返回Delegate

someNonGenericExpression.Compile().DynamicInvoke(2,3);

答案 1 :(得分:3)

一般情况下,如果您只想评估 lambda,请不要使用Expression<T>,而只需使用lambda直接定义Func<T>

Func<double, double, double> add = (x, y) => x + y;
double result = add(42.2, 52.1);

如果您出于其他原因而有Expression<T>,并且需要对其进行评估,则可以使用Expression<T>.Compile将其转换为委托:

Expression<Func<double, double, double>> add = (x, y) => x + y;
var asDelegate = add.Compile();
double result = asDelegate(42.2, 52.1);

答案 2 :(得分:0)

Expression.Compile()会将您的表达式编译成函数/动作。这样做,然后调用该方法。

Expression<Func<double, double, double>> add = (x, y) => x + y;
Func<double, double, double> addFunc = add.Compile();
double result = addFunc(2, 3);