频道栏目
首页 > 程序开发 > 综合编程 > 其他综合 > 正文
Expression解析
2019-01-10 09:25:06         来源:小小竹  
收藏   我要投稿

Expression

表达式目录树 1.什么是表达式目录树Expression? 表达式目录树是一个数据结构,语法树。

首先我们去看看Expressions类 ,定义了一个泛型委托类型TDelegate:

1     // 摘要:
2     //     将强类型化的 Lambda 表达式表示为表达式树形式的数据结构。 此类不能被继承。
3     //
4     // 类型参数:
5     //   TDelegate:
6     //     该委托的类型, System.Linq.Expressions.Expression`1 表示。
7     public sealed class Expression : LambdaExpression

我们先来一个带返回值的委托: 其中m、n是两个Int 类型的参数

1 Func func = (m, n) => m * n + 2;
//lambda实例化委托 是个方法 是实例化委托的参数
int iResult1 =func.Invoke(1,3); //调用执行

通过表达式目录树计算 m*n+2:

1  Expression> exp = (m, n) => m * n + 2;
2  int iResult2 = exp.Compile().Invoke(1, 2);  
//Complie()方法将编译表达式树由描述为可执行代码的 lambda 表达式,并生成一个委托,表示 lambda 表达式。所以可以调用Invoke方法。

通过中间语言IL反编译查看源码Expression> exp = (m, n) => m * n + 2

表达式目录树结构拆分步骤:

\

手动拼装表达式目录树 m * n + m + n + 2;

 1  {
 2     //Expression> expression = (m, n) => m * n + m + n + 2;
 3     //int iResult = expression.Compile().Invoke(1, 2);
 4 
 5     ParameterExpression m = Expression.Parameter(typeof(int), "m"); //第一个参数 M
 6     ParameterExpression n = Expression.Parameter(typeof(int), "n");  //第二个参数 n
 7     var constant = Expression.Constant(2);   //常量 2
 8 
 9     var mutiply = Expression.Multiply(m, n);  // m*n
10     var plus1 = Expression.Add(mutiply, m);   // m*n+m
11     var plus2 = Expression.Add(plus1, n);     //m*n+m+n
12     var plus3 = Expression.Add(plus2, constant); //m*n+m+n+2 
13     Expression> expression = Expression.Lambda>(plus3, new ParameterExpression[] { m, n });
       //组装表达式目录树
14     int iResult = expression.Compile().Invoke(1, 2);//调用
15   }
点击复制链接 与好友分享!回本站首页
相关TAG标签 Expression 解析
上一篇:系统禁用执行FIPS政策导致程序发生“调用的目标发生了异常”
下一篇:C#中Enum用法小结
相关文章
图文推荐
点击排行

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站