动态的构造一个表达式树
ParameterExpression a = Expression.Parameter(typeof(int), "a");
ParameterExpression b = Expression.Parameter(typeof(int), "b");
BinaryExpression be = Expression.Add(a, b);
Expression<Func<int, int, int>> expressionTree = Expression.Lambda<Func<int, int, int>>(be, a, b);
BinaryExpression body = (BinaryExpression)expressionTree.Body;
ParameterExpression left = (ParameterExpression)body.Left;
ParameterExpression Right = (ParameterExpression)body.Right;
Console.WriteLine("表达式树结构为{0}", expressionTree);
Console.WriteLine("表达式主体为:{0}{1}", Environment.NewLine, body);
Console.WriteLine("表达式左节点为:{0}{4}节点类型为{1}{4}表达式右节点为:{2}{4}节点类型为:{3}{4}", left, left.Type, Right, Right.Type, Environment.NewLine);
通过Lambda表达式来构造表达式树
Expression<Func<int, int, int>> expressionTree = (a, b) => a + b;
Console.WriteLine("参数1:{0},参数2:{1}", expressionTree.Parameters[0], expressionTree.Parameters[1]);
BinaryExpression body = (BinaryExpression)expressionTree.Body;
ParameterExpression left = (ParameterExpression)body.Left;
ParameterExpression Right = (ParameterExpression)body.Right;
Console.WriteLine("表达式树结构为{0}", expressionTree);
Console.WriteLine("表达式主体为:{0}{1}", Environment.NewLine, body);
Console.WriteLine("表达式左节点为:{0}{4}节点类型为{1}{4}表达式右节点为:{2}{4}节点类型为:{3}{4}", left, left.Type, Right, Right.Type, Environment.NewLine);
如何把表达式树转换为可执行代码
Expression<Func<int, int, int>> expressionTree = (a, b) => a + b;
Func<int, int, int> delInstance = expressionTree.Compile();
int result = delInstance(2, 3);
Console.WriteLine("2和3的和为{0}", result);