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-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 expr为语句的λ表达式
[1]λ表达式:Lambda Expression,Lambda的发音为['læmd´]。