C#

C# / 람다 실습 - Lambda / Expression 과 Func<> 대리자를 활용한 람다 식 구현

universedevelope 2022. 8. 10. 15:26
// Expression 을 사용하기 위한 using 구문
using System.Linq.Expressions;

 class Program
    {
        static void Main(string[] args)
        {
            // 1*2 + (x-y) ▶ 이 식을 구현하기 위해서 Expression 을 활용

            // ① Constant 
            Expression const1 = Expression.Constant(1);
            Expression const2 = Expression.Constant(2);

            // ② Multiply
            Expression leftExp = Expression.Multiply(const1, const2); // 1 * 2


            // ③ Parameter
            Expression param1 = Expression.Parameter(typeof(int)); // x를 위한 변수
            Expression param2 = Expression.Parameter(typeof(int)); // y를 위한 변수

            // ④ Subtract
            Expression rightExp = Expression.Subtract(param1, param2);    // x-y

            // ⑤ Add
            Expression exp = Expression.Add(leftExp, rightExp);

            // ⑥ Lambda
            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 = 7, y = 8;
            Console.WriteLine($"1*2+({7}-{8}) = {func(7, 8)}");
            // 1*2+(7-8) = 1


        }
    }
728x90