[英]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.