表达式树允许将 lambda 表达式表示为数据结构而非可执行代码。表达式目录树是System.Linq.Expressions.Expression< D > 形式的表达式目录树类型 (expression tree type) 的值,其中 D 是任何委托类型。
如果存在从 lambda 表达式到委托类型 D 的转换,则也存在到表达式树类型 Expression< D > 的转换。而lambda 表达式到委托类型的转换生成引用该 lambda 表达式的可执行代码的委托,到表达式树类型的转换创建该 lambda 表达式的表达式树表示形式。
表达式树是 lambda 表达式在内存中的高效数据表示形式,使 lambda 表达式的结构透明而又清晰。
与委托类型 D 一样, Expression< D > 具有与 D 相同的参数和返回类型。
下面的示例将 lambda 表达式表示为可执行代码和表达式树。因为存在到 Func< int,int > 的转换,所以也存在到 Expression< Func< int,int > > 的转换:
Func< int,int > del = x => x + 1; // Code
Expression< Func< int,int > > exp = x => x + 1; // Data
进行上面的赋值之后,委托 del 引用返回 x + 1 的方法,表达式目录树 exp 引用描述表达式 x => x +1 的数据结构。
泛型类型 Expression< D > 的确切定义以及将 lambda 表达式转换为表达式树类型时有关构造表达式树的准确规则不在本文的介绍范围之内,将另作说明。
有两个要点需要明确指出:
● 并非所有 lambda 表达式都能转换为表达式树。例如,具有语句体的 lambda 表达式和包含赋值表达式的 lambda 表达式不能这样表示。在这些情况下,转换仍存在,但在编译时将失败
● Expression< D > 提供一个实例方法 Compile,该方法产生一个类型为 D 的委托:
Func< int,int > del2 = exp.Compile();
调用此委托将导致执行表达式树所表示的代码。因此,根据上面的定义, del 和 del2 等效,而且
下面的两个语句也将等效:
int i1 = del(1);
int i2 = del2(1);
执行此代码后, i1 和 i2 的值都为 2。
详细解决方案
[深入学习C#]表达式树门类——Expression tree types
热度:139 发布时间:2016-05-05 03:32:52.0
相关解决方案
- Expression dqgrade is undefined on line 20, column 30-freemarker报这样的错如何解决
- 出现Operator '==' incompatible with operand types 'Int32' and 'Object'该怎么处理
- 哪位高手用过jquery easy ui 的checkbox tree 啊请问一下
- 不能设置 Expression 属性,因为表达式中存在循环引用。该如何处理
- 关于DataColumn.Expression 设置开根号公式的有关问题
- Expression Web的相关有关问题
- asp.net tree view 空件在那下载?解决思路
- 关于 XML 和 javascript 在 asp.net页面显示 tree 的有关问题
- 梅花雪的 tree 控件有没有带 checkbox 功能的版本?大名鼎鼎的梅花雪为什么不弄一个这个版本的呢!现在都让ms 的tree 把小弟我们折磨死了
- Expression.Condition跟Expression.IfThenElse区别
- Weblogic中Ext.tree.TreePanel数据加载不已
- 解决libxml/tree.h not found有关问题
- DTD XHTML 1.0 Strict标准中css使用Event (event:expression)属性不起作用,怎么处理
- Expression Blend4 汉语言破解版
- Expression Blend 4安装有关问题?哪位高手能帮小弟我解决一上
- 正则表达式札记(Regular expression 2)
- 正则表达式札记(Regular expression 1)
- "Expression syntax in function save",?有这个错误,不知怎么修改. ...
- [求助]error:Expression syntax
- 至于Microsoft Expression Blend4破解的方法
- extJs tree,该怎么处理
- 给IE打补丁技艺之CSS Expression
- IE8中text失去焦点后死掉(IE8不再支持CSS expression)
- css 中 expression 跟 js中 setExpression
- 请教上哪位高手知道,column-tree.css中zoom是什么意思,在上面这代码里面起什么作用
- dhtml Tree 异步动态加载容易例子
- DHTMLX Tree JSON增添自定义属性方法
- 在HTML5中应用Form新的input types
- PHP(一)Environment and Types
- EXT tree 真么平添单击事件