I want to reuse Expression instances for another Expression building like in the code below. Is it safe? Are there any pitfalls with it?
using System.Linq.Expressions;
class Program
{
static void Main()
{
ParameterExpression x = Expression.Parameter(typeof(int), "x");
ParameterExpression y = Expression.Parameter(typeof(int), "y");
// Reuse x and y parameter expressions
BinaryExpression sum = Expression.Add(x, y);
BinaryExpression mutiply = Expression.Multiply(x, y);
// Reuse multiply and sum expressions
BinaryExpression foo = Expression.Subtract(mutiply, sum); // xy - (x + y)
Func<int, int, int> sumFunc = Expression.Lambda<Func<int, int, int>>(sum, x, y).Compile();
Func<int, int, int> multiplyFunc = Expression.Lambda<Func<int, int, int>>(mutiply, x, y).Compile();
Func<int, int, int> fooFunc = Expression.Lambda<Func<int, int, int>>(foo, x, y).Compile();
Console.WriteLine(sumFunc(3, 2));
Console.WriteLine(multiplyFunc(3, 2));
Console.WriteLine(fooFunc(3, 2));
}
}