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 を返すことができるように、適切な右オペランドを構築する方法がわかりません。