15.10 λ表达式[1]

λ(Lambda)表达式和匿名方法基本相同,只是语法不同,可以说,λ表达式就是匿名方法。实际上,λ表达式就是从匿名方法演变而来,λ表达式的语法比匿名方法更加简洁:

(param)=>expr

其中,param是一个输入参数列表,expr是一个表达式或者一系列语句。

λ表达式具有的特性如下:

❑在一个具有唯一的显式类型参数的Lambda表达式中,圆括号可以从参数列表中删除,如:(parm)=>expr可以简写为:param=>expr;

❑当输入参数不唯一时,括号则不能省略;

❑输入参数列表中的各参数可以显式指定类型,也可以省略掉参数类型,具体类型通过类型推断机制判断;

❑expr可以只包含一个计算表达式,也可以包含一系列语句,只是语句需要包括在大括号内。

接下来,我们分别学习expr为表达式和语句的情况。

先来看expr为表达式时的λ表达式,如代码清单15-11所示。

代码清单15-11 expr为表达式的λ表达式


1 namespace ProgrammingCSharp4

2{

3//委托类型

4 public delegate string PrintDelegate(string content);

5

6 public class DelegateSample

7{

8 public static void Main()

9{

10//λ表达式

11 PrintDelegate pd=(str)=>str+="\ndate:2010-1-1";

12 string result=pd("The quick brown fox jumps oyer a lazy dog.");

13 System.Console.WriteLine(result);

14}

15}

16}


上述代码的运行结果为:


The quick brown fox jumps oyer a lazy dog.

date:2010-1-1


我们来看看λ表达式的结构,如图15-9所示。

15.10 λ表达式[1] - 图1

图 15-9 expr为表达式的λ表达式

当expr为语句时,如代码清单15-12所示。

代码清单15-12 expr为语句的λ表达式


1 namespace ProgrammingCSharp4

2{

3//委托类型

4 public delegate void PrintDelegate(string content);

5

6 public class DelegateSample

7{

8 public static void Main()

9{

10//λ表达式

11 PrintDelegate pd=(string str)=>

12{

13 System.Console.WriteLine("Printing……");

14 System.Console.WriteLine("Content:{0}",str);

15};

16 pd("The quick brown fox jumps oyer a lazy dog.");

17}

18}

19}


上述代码的运行结果如下:


Printing……

Content:The quick brown fox jumps oyer a lazy dog.


上述代码如图15-10所示。

15.10 λ表达式[1] - 图2

图 15-10 expr为语句的λ表达式

[1]λ表达式:Lambda Expression,Lambda的发音为['læmd´]。