执行LambdaExpression并获取返回值作为对象

Joe*_*oel 29 c# lambda expression

有干净的方法吗?

Expression<Func<int, string>> exTyped = i => "My int = " + i;
LambdaExpression lambda = exTyped;

//later on:

object input = 4;
object result = ExecuteLambdaSomeHow(lambda, input);
//result should be "My int = 4"
Run Code Online (Sandbox Code Playgroud)

这适用于不同类型.

Kev*_*vin 35

当然......你只需要编译你的lambda然后调用它......

object input = 4;
var compiledLambda = lambda.Compile();
var result = compiledLambda.DynamicInvoke(input);
Run Code Online (Sandbox Code Playgroud)

Styxxy提出了一个很好的观点...让编译器帮助你,你会得到更好的服务.注意编译表达式,如下面的代码中输入和结果都是强类型.

var input = 4;
var compiledExpression = exTyped.Compile();
var result = compiledExpression(input);
Run Code Online (Sandbox Code Playgroud)

  • `compiledLambda.Invoke(input);` 在这里可能是更好的选择,如果@Styxxy 指出了确切的类型。由于较少的反射,`Invoke` 比 `DynamicInvoke` 快,参见 http://stackoverflow.com/questions/12858340/difference-between-invoke-and-dynamicinvoke (2认同)