Lambda表达式的语句体
在前面的所有代码中,Lambda表达式的语句体都只使用了一个表达式。我们还说明了这个表达式如何解释为Lambda表达式的返回值,例如,如何给返回类型为int的委托使用表达式 paramA + paramB
作为Lambda表达式的语句体(假定paramA和paramB隐式或显式类型化为int值,如示例代码所示)。
前面的一个示例说明了对于语句体中使用的代码而言,返回类型为void的委托的要求并不高:
myTimer.Elapsed += (source, e) => Console.WriteLine(
"Event handler called after {0} millisenconds.",
(source as Timer).Interval);
上面的语句不返回任何值,所以它只是执行,其返回值不在任何地方使用。
可以将Lambda表达式看成匿名方法语法的扩展,所以还可以在Lambda表达式的语句体中包含多个语句。为此,只需把一个代码块放在花括号中,类似于C#中提供多行代码的其他情况:
(paramA, param2) =>
{
// Multiple statements ahoy!
}
如果使用Lambda表达式和返回类型不是void的委托类型,就必须用return关键字返回一个值,这与其他方法一样:
(param1, param2) =>
{
// Multiple statements ahoy!
return returnValue;
}
例如,可将前面示例中的如下代码:
PerformOperations((paramA, paramB) => paramA + paramB);
改写为:
PerformOperations(delegate(int paramA, int paramB)
{
return paramA + paramB;
});
另外,也可以把代码改写为:
PerformOperations((paramA, paramB) =>
{
return paramA + paramB;
});
这更像是原来的代码,因为它保持了paramA和paramB参数的隐式类型化。
大多数情况下,在使用单一的表达式时,Lambda表达式最有用,也最简洁。说实话,如果需要多个语句,则定义一个单独的非匿名方法来替代Lambda表达式较好,这也会使代码更便于重用。