0

我正在使用 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。

4

1 回答 1

4

只想把 anyx + y变成x + 1吗?如果是这样,我怀疑你只是想要:

Expression right = Expression.Constant(1);

(当然,您应该验证加法类型是否适用于整数。)

如果这不是您想要做的,请更具体。

于 2012-11-03T20:07:14.253 回答