簡體   English   中英

C#語法lambda與花括號

[英]C# Syntax lambdas with curly braces

delegate int AddDelegate(int a, int b);
AddDelegate ad = (a,b) => a+b;


AddDelegate ad = (a, b) => { return a + b; };

以上兩個版本的AddDelegate是等效的。 從語法上講,為什么在第二個AddDelegate中有必要在}之前和之后加一個分號? 你可以編譯錯誤; expected ; expected如果其中任何一個缺失。

也許這會讓它更清晰:

AddDelegate ad = (a, b) =>
                 {
                     return a + b;
                 };

這些分號有效地用於不同的行。

語句lambda包含一個語句塊...這意味着每個語句都需要一個語句終止符。 請注意,這類似於C#2中的匿名方法:

AddDelegate ad = delegate(int a, int b) { return a + b; };

把它想象成一個方法體,所以:

AddDelegate ad = GeneratedMethod;
...
private int GeneratedMethod(int a, int b) { return a + b; }

請注意原始lambda表達式或匿名方法中的最后一個分號是賦值語句的終止符。 塊內的分號是return語句的終止符。

表達式拉姆達只包含一種表達......這意味着你不需要語句終止。

它們只是兩種不同形式的lambda表達式。 有關詳細信息,請參閱MSDN 如果你只有一個語句並且不想包含分號,那么只需使用表達式lambda :)

請注意,語句lambdas當前無法轉換為表達式樹。

使用花括號允許lambda表達式中的多個語句。 這就是為什么需要使用半冒號來表示花括號中語句的結尾。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM