Skip to content

Instantly share code, notes, and snippets.

@AlexArchive
Created September 8, 2014 22:51
Show Gist options
  • Save AlexArchive/8016faac2bbb1c20ca25 to your computer and use it in GitHub Desktop.
Save AlexArchive/8016faac2bbb1c20ca25 to your computer and use it in GitHub Desktop.
Mutating Expression Tree
public class Program
{
private static void Main()
{
var operandOne = Expression.Parameter(typeof (int));
var operandTwo = Expression.Parameter(typeof(int));
var expression =
Expression.Lambda(
Expression.Add(
operandOne,
operandTwo
),
operandOne,
operandTwo
);
var visitor = new AddToSubtractExpressionVisitor();
expression = (LambdaExpression)visitor.Visit(expression);
var func = expression.Compile() as Func<int, int, int>;
Console.WriteLine(func(10, 10));
}
}
public class AddToSubtractExpressionVisitor : ExpressionVisitor
{
protected override Expression VisitBinary(BinaryExpression node)
{
return node.NodeType == ExpressionType.Add
? Expression.Subtract(
this.Visit(node.Left), this.Visit(node.Right))
: node;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment