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个参数");
更多精彩
赞助商链接