Roy*_*mir 2 .net c# .net-4.0 expression-trees
我有这个代码生成一个委托,它将myNumber乘以5
ParameterExpression numParam = Expression.Parameter(typeof(int), "num");
ConstantExpression five = Expression.Constant(5, typeof(int));
BinaryExpression numMultiply = Expression.Multiply(numParam,five);
Run Code Online (Sandbox Code Playgroud)
让我们创建委托:
Expression<Func<int, int>> lambda1 =
Expression.Lambda<Func<int, int>>(
numMultiply,
new ParameterExpression[] { numParam });
Console.Write(lambda1.Compile()(4));
Run Code Online (Sandbox Code Playgroud)
现在让我们说我要更改此表达式树Add
而不是Multiply
这里是新行:
BinaryExpression numAdd = Expression.Add(numParam,five);
Run Code Online (Sandbox Code Playgroud)
但是我如何更改lambda1以便它现在将使用numAdd
而不是multiply
?
你只需构建一个新的,并编译它.
Expression<Func<int, int>> lambda1 =
Expression.Lambda<Func<int, int>>(
numAdd,
new ParameterExpression[] { numParam });
Run Code Online (Sandbox Code Playgroud)
从MSDN页面:
表达式树应该是不可变的.这意味着如果要修改表达式树,则必须通过复制现有表达式树并替换其中的节点来构造新表达式树.您可以使用表达式树访问者遍历现有表达式树.
"应该是"这个短语有点奇怪但是当你看到API时,你会发现所有相关的属性(Body,Left,Right)都是只读的.
归档时间: |
|
查看次数: |
1352 次 |
最近记录: |