我正在制作一个LINQ lambda表达式:
Expression<Func<double, double, double>> add = (x, y) => x + y;
但现在我该如何评估它,比如找2 + 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);