我正在使用 C# 中的表达式树并想修改表达式。
我使用了这个示例,但是在示例中他们重用了左右节点。我将如何修改任何一个节点?
我得到以下代码:
[TestMethod]
public void ExpressionDemo_ModifiesExpression()
{
var demo = new ExpressionDemo();
var expression = demo.ModifyAddition((Expression<Func<int, int>>)(x => x + 1));
}
我使用简单的 + 1 加法函数调用 ModifyAddition。我想将右操作数 (1) 修改为不同的整数。
public class ExpressionDemo : ExpressionVisitor
{
public Expression<Func<int, int>> ModifyAddition(Expression func)
{
return (Expression<Func<int, int>>) Visit(func);
}
protected override Expression VisitBinary(BinaryExpression node)
{
if (node.NodeType == ExpressionType.Add)
{
Expression left = node.Left;
Expression right = ???
return Expression.MakeBinary(ExpressionType.Add, left, right);
}
return base.VisitBinary(node);
}
}
我对如何构造正确的右操作数感到困惑,这样我就可以返回一个新的 BinaryExpression。