Lambda表达式树

动态的构造一个表达式树

//表达式的参数
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表达式来构造表达式树

//将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);

如何把表达式树转换为可执行代码

//将Lambda表达式构建成表达式树
Expression<Func<int, int, int>> expressionTree = (a, b) => a + b;
//通过调用Compile方法来生成Lambda表达式的委托
Func<int, int, int> delInstance = expressionTree.Compile();
//调用委托实例获取结果
int result = delInstance(2, 3);
Console.WriteLine("2和3的和为{0}", result);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值