C#3.0语言新特性之Lambda表达式
2009-03-12 08:19:19 来源:WEB开发网20.5.4 重载抉择
参数列表中的Lambda表达式将影响到特定情形下的重载抉择(也称重载分析,重载解析等,即从几个重载方法中选择最合适的方法进行调用的过程)。
下面是新添加的规则:
对于Lambda表达式L,且其具有推断出来的返回值类型,当委托类型D1和委托类型D2具有完全相同的参数列表,并且将L的推断出来的返回值类型隐式转换为D1的返回值类型要优于将L的推断出来的返回值类型隐式转换为D2的返回值类型时,称L到D1的隐式转换优于L到D2的隐式转换。如果这些条件都不为真,则两个转换都不是最优的。
20.5.5 表达式树
表达式树允许将Lambda表达式表现为数据结构而不是可执行代码。一个可以转换为委托类型D的Lambda表达式,也可以转换为一个类型为System.Linq.Expressions. Expression<D>的表达式树。将一个Lambda表达式转换为委托类型导致可执行代码被委托所生成和引用,而将其转换为一个表达式树类型将导致创建了表达式树实例的代码被发出。表达式树是Lambda表达式的一种高效的内存中数据表现形式,并且使得表达式的结构变得透明和明显。
如下面的例子将一个Lambda表达式分别表现为了可执行代码和表达式树。由于存在到Func<int, int>的转换,因此存在到Expression<Func<int, int>>的转换。代码如下所示:
using System.Linq.Expressions;
// 代码
Func<int, int> f = x => x + 1;
// 数据
Expression<Func<int, int>> e = x => x + 1;
在这些赋值完成之后,委托f标识一个返回x + 1的方法,而表达式树e表示一个描述了表达式x + 1的数据结构。
系列文章:
C#3.0语言新特性之匿名变量
C#3.0语言新特性之隐式类型
C#3.0语言新特性之扩展方法
C#3.0语言新特性之对象和集合初始化器
更多精彩
赞助商链接