小编dal*_*alo的帖子

获取表达式树中ParameterExpression的运行时值

我错过了显而易见的事项:如何在lambda表达式表达式树中访问参数的值?

场景:对于委托x,我动态创建一个lambda表达式,其表达式树体与委托x具有相同的签名.在lamdba的主体内部,我做了一些验证,检查,记录东西(这只是测试代码,而不是生产),然后我用原始参数调用原始委托x.如果委托具有返回值,则返回该值.

这非常有效(包括将参数传递给原始委托).

但是如果我想访问传递给delegate/lambda的原始参数值,我就会碰到一堵砖墙.

伪代码:

var del = new Func<string, int>(_=> {return 42;});
var paramDefs = Array.ConvertAll<ParameterInfo, ParameterExpression>(del.Method.GetParameters(), _ => { return Expression.Parameter(_.ParameterType, _.Name); });
var variableTest = Expression.Variable(typeof(string), "str");

var expression = Expression.Block(
  new [] { variableTest },
  // this line assigns the actual run time value (which is what I need) of the parameter to the variable - but I cannot hardcode the index.
  //Expression.Assign(variableTest, paramDefs[0]) 
  // this line would assigns the ParameterExpression object (causing a run-time exception …
Run Code Online (Sandbox Code Playgroud)

c# lambda delegates expression-trees c#-4.0

5
推荐指数
1
解决办法
4111
查看次数

标签 统计

c# ×1

c#-4.0 ×1

delegates ×1

expression-trees ×1

lambda ×1