C# Lambda表達式的語句體
在前面的所有代碼中,Lambda表達式的語句體都只使用了一個表達式。我們還說明了這個表達式如何解釋為Lambda表達式的返回值,例如,如何給返回類型為int的委托使用表達式paramA+ paramB作為Lambda表達式的語句體(假定paramA和paramB隱式或顯式類型化為int值,如示例代碼所示)。
前一個示例說明了對于語句體中使用的代碼而言,返回類型為void的委托的要求并不高:
myTimer.Elapsed += (source,e) => WriteLine("Event handler called after " + $"{{source as Timer).Interval} milliseconds.");
上面的語句不返回任何值,所以它只是執(zhí)行,其返回值不在任何地方使用。
可將Lambda表達式看成匿名方法語法的擴展,所以還可以在Lambda表達式的語句體中包含多個語句。為此,只需要把代碼塊放在花括號中,類似于C#中提供多行代碼的其他情況:
(paraml/ param2)=>
{
// Multiple statements ahoy!
}
如果使用Lambda表達式和返回類型不是void的委托類型,就必須用return關鍵字返回一個值,這與其他方法一樣:
(paraml, 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參數(shù)的隱式類型化。
大多數(shù)情況下,在使用單一表達式時,Lambda表達式最有用,也最簡潔。坦率地講,如果需要多個語句,則定義一個單獨的非匿名方法來替代Lambda表達式比較好,這也會使代碼更便于重用。
點擊加載更多評論>>