0

C# で式ツリーをいじっていて、式を変更したいと考えています。

このを使用しましたが、例では左右のノードを再利用しています。いずれかのノードを変更するにはどうすればよいですか?

次のコードを取得しました。

    [TestMethod]
    public void ExpressionDemo_ModifiesExpression()
    {
        var demo = new ExpressionDemo();

        var expression = demo.ModifyAddition((Expression<Func<int, int>>)(x => x + 1));
    }

単純な + 1 加算 Func を使用して 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

何かを変えたいだけですか?もしそうなら、私はあなたがただ欲しいと思う:x + yx + 1

Expression right = Expression.Constant(1);

(もちろん、加算タイプが整数用であることを検証する必要があります。)

それがあなたがやろうとしていることではない場合は、より具体的にしてください。

于 2012-11-03T20:07:14.253 に答える