浅析C#中的Lambda表达式

时间:2021-07-11 20:03:27

上文中用了一点篇幅讲述了匿名方法的使用。自从C#3.0开始,就可以使用一种新语法把实现代码赋予委托,即Lambda表达式。只要有委托参数类型的地方,就可以使用Lambda表达式。上文中使用匿名方法的例子可以改为使用Lambda表达式。

语法:
Lambda表达式的定义方式为:“([参数列表]) => 表达式”。运算符“=>”是一种与赋值运算“=”具有相同优先级的右结合运算符,在英语里读作:“goes to”。

参数:
只有一个参数:

FunconeParam = s => String.Format("change uppercase {0}", s.ToUpper());
Console.WriteLine(oneParam("test"));

只写出参数名就足够了,上面代码中,Lambda表达式使用了参数s。因为委托类型定义了一个string参数,所以s的类型就是string。该代码实现了调用String.Format()方法来返回一个字符串,在调用该委托时,把字符串写到控制台上。

多个参数:

Func(double, double, double)twoParams = (x,y) => x*y;
Console.WriteLine(twoParams(3,2));

如果委托使用多个参数就把参数名放在花括号中。这里参数x和y的类型是double。
为了方便,可以在花括号中给变量名添加参数类型:

Func(double, double, double)twoParamsWithType = (double x,double y) => x*y;
Console.WriteLine(twoParamsWithType (3,2));

多行代码:
如果Lambda表达式只有一条语句,在方法块内就不需要花括号和return语句,因为编译器会添加一条隐式的return语句:

Func square = x => x*x;

但是添加花括号、return语句以及分号是完全合法的:

Func square = x =>
{
return x*x;
};

但是如果Lambda表达式的实现代码中需要多条语句,就必须添加花括号和return语句:

Func lambda = param =>
{
param += mid;
param += " fuck";
return param;
};

注意:如果使用了花括号,一定不要忘了花括号后面的分号!!!

在上述的内容中,多次使用了Func,详细内容请见博客Func<>委托