class Program
{
static void Main(string[] args)
{
//1*2+(x-y)
Expression const1 = Expression.Constant(1);
Expression const2 = Expression.Constant(2);
//1*2
Expression leftExp = Expression.Multiply(const1, const2);
//x, y를 위한 변수
Expression param1 = Expression.Parameter(typeof(int));
Expression param2 = Expression.Parameter(typeof(int));
//x-y
Expression rightExp = Expression.Subtract(param1, param2);
Expression exp = Expression.Add(leftExp, rightExp);
Expression<Func<int, int, int>> expression
= Expression<Func<int, int, int>>.Lambda<Func<int, int, int>>(exp, new ParameterExpression[] {
(ParameterExpression)param1, (ParameterExpression)param2});
Func<int, int, int> func = expression.Compile();
// x = 10, y = 7
Console.WriteLine($"1*2+({10}-{7}) = {func(10, 7)}");
}
}
람다식을 활용하여 만드는 식 트리입니다. 이후 쓸 일이 없으면 싶을 정도로 복잡해보이네요...
구현 모습입니다.