using System.Collections.Generic;
using System.Linq.Expressions;
using ExpressionTreeToolkit;
static Dictionary<Expression, String> expressions;
public static void Main()
expressions = new Dictionary<Expression, string>(ExpressionEqualityComparer.Default);
Console.WriteLine("Expression equality:");
Expression<Func<int, int, int>> sumXYExpression = (x, y) => x + y;
Expression<Func<int, int, int>> prodXYExpression = (x, y) => x * y;
Expression<Func<int, int, int>> sumABExpression = (a, b) => a + b;
Expression<Func<int, int, int>> diffABExpression = (a, b) => a - b;
AddExpression(sumXYExpression, "x + y");
AddExpression(prodXYExpression, "x * y");
AddExpression(sumABExpression, "a + b");
AddExpression(diffABExpression, "a - b");
static void AddExpression(Expression exp, string name)
expressions.Add(exp, name);
Console.WriteLine("Added {0}, Count = {1}, HashCode = {2}",
name, expressions.Count.ToString(), exp.GetHashCode());
catch (ArgumentException)
Console.WriteLine("An expression equal to {0} is already in the collection.", name);