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