我有这样的代码,其生产出乘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。 – Servy