【发布时间】:2013-01-14 19:03:25
【问题描述】:
我有这段代码可以生成一个委托,它将 myNumber 乘以 5
ParameterExpression numParam = Expression.Parameter(typeof(int), "num");
ConstantExpression five = Expression.Constant(5, typeof(int));
BinaryExpression numMultiply = Expression.Multiply(numParam,five);
让我们创建委托:
Expression<Func<int, int>> lambda1 =
Expression.Lambda<Func<int, int>>(
numMultiply,
new ParameterExpression[] { numParam });
Console.Write(lambda1.Compile()(4));
现在假设我想将此表达式树更改为 Add 而不是 Multiply
这是新行:
BinaryExpression numAdd = Expression.Add(numParam,five);
但是如何更改 lambda1 以便它现在使用 numAdd 而不是 multiply ?
【问题讨论】:
-
Expression是不可变的;你无能为力会改变它。您唯一能做的就是根据您想要的更改创建一个新的Expression,并确保相关变量引用新的Expression。
标签: c# .net .net-4.0 expression-trees