位置:首頁(yè) > 軟件操作教程 > 編程開發(fā) > C# > 問題詳情

C# Lambda表達(dá)式的語句體

提問人:劉團(tuán)圓發(fā)布時(shí)間:2020-12-08

    在前面的所有代碼中,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ì)使代碼更便于重用。

繼續(xù)查找其他問題的答案?

相關(guān)視頻回答
回復(fù)(0)
返回頂部