我有這樣的代碼,其生產出乘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