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

C# Lambda表達式的語句體

提問人:劉團圓發(fā)布時間:2020-12-08

    在前面的所有代碼中,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表達式比較好,這也會使代碼更便于重用。

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

相關視頻回答
回復(0)
返回頂部