表达式树

 

普通方法构造表达式树

        static void Main(string[] args)
        {
            //表达式树的参数
            ParameterExpression paramA = Expression.Parameter(typeof(int), "aa");
            ParameterExpression paramB = Expression.Parameter(typeof(int), "bb");

            //表达式树的主体部分
            BinaryExpression be = Expression.Add(paramA, paramB);

            //构造表达式树
            Expression<Func<int, int, int>> expressionTree = Expression.Lambda<Func<int, int, int>>(be, paramA, paramB);

            //分析树结构
            //主体部分
            BinaryExpression body = (BinaryExpression)expressionTree.Body;

            //左节点
            ParameterExpression left = (ParameterExpression)be.Left;

            //右节点
            ParameterExpression right = (ParameterExpression)be.Right;


            Console.WriteLine(expressionTree);
            Console.WriteLine(body);
            Console.WriteLine(left.Name);
            Console.WriteLine(right.Name);
            Console.ReadKey();
        }

 

 

利用Lambda表达式构造表达式树

                //利用Lambda表达式构造表达式树
                Expression<Func<int, int, int>> expressionTree = (a, b) => a + b;

                Console.WriteLine(expressionTree);
                Console.WriteLine(expressionTree.Body);
                var param = expressionTree.Parameters;
                foreach (var item in param)
                {
                    Console.WriteLine(item.Name + ":::" + item.Type);
                }

 

 

将表达式树转换成可执行代码

                //利用Lambda表达式构造表达式树
                Expression<Func<int, int, int>> expressionTree = (a, b) => a + b;

                //生成委托的实例
                Func<int, int, int> lambda = expressionTree.Compile();

                //执行委托的实例
                var result = lambda(1, 2);

                Console.WriteLine(result);//3

 

posted @ 2018-03-16 10:00  热敷哥  阅读(132)  评论(0)    收藏  举报