日期:2011-04-28  浏览次数:20388 次

原文:《C# Version 3.0 Specification》,Microsoft
翻译:lover_P
表达式树允许将拉姆达表达式表现为数据结构而不是可执行代码。一个可以转换为委托类型D的拉姆达表达式也可以转换为一个类型为System.Query.Expression<D>的表达式树。将一个拉姆达表达式转换为委托类型导致可执行代码被委托所生成和引用,而将其转换为一个表达式树类型将导致创建了表达式树实例的代码被发出(Emit)。表达式树是拉姆达表达式的一种高效的内存中(in-memory)数据表现形式,并且使得表达式的结构变得透明和明显。

下面的例子将一个拉姆达表达式分别表现为了可执行代码和表达式树。由于存在到Func<int, int>的转换,因此存在到Expression<Func<int, int>>的转换。

Func<int, int> f = x => x + 1;                 // 代码

Expression<Func<int, int>> e = x => x + 1;  // 数据

在这些赋值完成之后,委托f标识一个返回x + 1的方法,而表达式树e表示一个描述了表达式x + 1的数据结构。

注意

表达式树的结构将被转换为一份单独的规范。该规范在PDC 2005技术预览版中并不适用。