C#3.0语言新特性之Lambda表达式
2009-03-12 08:19:19 来源:WEB开发网我们来看如下例子:
class Test
{
delegate void OutHandler(out int x);
static void Print(OutHandler test)
{
int i;
test(out i);
Console.Write(i);
}
static void Main()
{
Print((out int x) => x = 3);
Console.Read();
}
}
l 如果委托有返回类型,则Lambda表达式的语句或语句块中也必须返回相同类型的数据;
l 如果委托有几种数据类型格式而在Lambda表达式中编译器无法推断具体数据类型时,则必须手动明确数据类型。
由上面可见,C# 2.0规范中提到的匿名方法规范同样适用于Lambda表达式。Lambda表达式是匿名方法在功能行上的超集,提供了下列附加的功能:
l Lambda表达式允许省略参数类型并对其进行推断,而匿名方法要求参数类型必须显式地声明。
l Lambda表达式体可以是表达式或语句块,而匿名方法体只能是语句块。
l 在类型参数推导和方法重载抉择时,Lambda表达式可以被作为参数传递。
l 以一个表达式作为表达式体的Lambda表达式可以被转换为表达式树。
20.5.2 Lambda表达式转换
和匿名方法表达式类似,Lambda表达式可以归类为一种拥有特定转换规则的值。这种值没有类型,但可以被隐式地转换为一个兼容的委托类型。特别地,当满足下列条件时,委托类型D兼容于Lambda表达式L:
更多精彩
赞助商链接