c#Expression表达式树了解

class Test
    {
        static void Main(string[] args)
        {
            //c#Expression表达式树了解


            Expression> add = () => 1 + 2;
            var func = add.Compile(); // Create Delegate--将表达式树描述的 lambda 表达式编译为可执行代码,并生成表示该 lambda 表达式的委托。
            var answer = func(); // Invoke Delegate
            Console.WriteLine(answer);//结果3

            #region   表达式树不是编译和可执行的代码,如果要执行它,需要将它转换成IL指令。

            // Addition is an add expression for "1 + 2"
            var one = Expression.Constant(1, typeof(int));
            var two = Expression.Constant(2, typeof(int));
            var addition = Expression.Add(one, two);
            Console.WriteLine(addition);//结果:(1+2)

            #endregion


            #region Lambda--表达式创建表达式树
            Expression> actionExpression = n => Console.WriteLine(n);
            Expression> funcExpression1 = (n) => n < 0;
            Expression> funcExpression2 = (n, m) => n - m == 0;
            //表达式树编译成委托
            var lambda = actionExpression.Compile();//Create Delegate--将表达式树描述的 lambda 表达式编译为可执行代码,并生成表示该 lambda 表达式的委托。
            lambda(11);//输出11
            var fe1 = funcExpression1.Compile();
            bool f1 = fe1(1);

            Console.WriteLine(f1);//输出False
            var fe2 = funcExpression2.Compile();
            bool fe = fe2(2, 4);

            Console.WriteLine(fe);//输出False

            #endregion



            Console.Read();
        }
    }

 

你可能感兴趣的:(c#)