WEB开发网
开发学院软件开发C语言 C#3.0语言新特性之Lambda表达式 阅读

C#3.0语言新特性之Lambda表达式

 2009-03-12 08:19:19 来源:WEB开发网   
核心提示:在C#2.0中引入了匿名方法,允许在期望出现委托的时候以“内联”的代码替代之,C#3.0语言新特性之Lambda表达式,尽管匿名方法提供了函数式编程语言中的很多表达能力,但匿名方法的语法实在是太罗嗦了,参数列中可包含任意个参数(与委托对应),如果参数列中有0个或1个以上参数,并且很不自然,Lam

在C#2.0中引入了匿名方法,允许在期望出现委托的时候以“内联”的代码替代之。尽管匿名方法提供了函数式编程语言中的很多表达能力,但匿名方法的语法实在是太罗嗦了,并且很不自然。Lambda表达式为书写匿名方法提供了一种更加简单、更加函数化的语法。

实际上Lambda表达式的本质是匿名方法,也即是当编译我们的程序代码时,编译器会自动帮我们将Lambda表达式转换为匿名方法。

20.5.1 创建Lambda表达式

Lambda表达式的书写方式是一个参数列表后跟“=>”记号,然后跟一个表达式或一个语句块,即Lambda表达式的语法格式为:

参数列 => 语句或语句块

Lambda表达式例子如下所示:

delegate int del(int i);

 ...

 del myDelegate = x => x * x;

 int j = myDelegate(5); //j = 25

关于“参数列”,Lambda表达式的参数列可以具有显式的或隐式的类型。在一个具有显式类型的参数列表中,每个参数的类型都是显式声明的。在一个具有隐式类型的参数列表中,参数的类型是从Lambda表达式出现的上下文中推断出来的——具体来说,是当Lambda表达式被转换为一个兼容的委托类型时,该委托类型提供了参数的类型。

当Lambda表达式只有一个具有隐式类型的参数时,参数列表中的括号可以省略。即:

(param) => expr

可以简写为:

param => expr

最后,参数列中可包含任意个参数(与委托对应),如果参数列中有0个或1个以上参数,则必须使用括号括住参数列,如下:

() => Console.Write("0个参数");

1 2 3 4 5 6  下一页

Tags:语言 特性 Lambda

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接