淺析C#中的Lambda表示式
阿新 • • 發佈:2019-01-02
上文中用了一點篇幅講述了匿名方法的使用。自從C#3.0開始,就可以使用一種新語法把實現程式碼賦予委託,即Lambda表示式。只要有委託引數型別的地方,就可以使用Lambda表示式。上文中使用匿名方法的例子可以改為使用Lambda表示式。
語法:
Lambda表示式的定義方式為:“([引數列表]) => 表示式”。運算子“=>”是一種與賦值運算“=”具有相同優先順序的右結合運算子,在英語裡讀作:“goes to”。
引數:
只有一個引數:
FunconeParam = s => String.Format("change uppercase {0}", s.ToUpper ());
Console.WriteLine(oneParam("test"));
只寫出引數名就足夠了,上面程式碼中,Lambda表示式使用了引數s。因為委託型別定義了一個string引數,所以s的型別就是string。該程式碼實現了呼叫String.Format()方法來返回一個字串,在呼叫該委託時,把字串寫到控制檯上。
多個引數:
Func(double, double, double)twoParams = (x,y) => x*y;
Console.WriteLine(twoParams(3,2));
如果委託使用多個引數就把引數名放在花括號中。這裡引數x和y的型別是double。
為了方便,可以在花括號中給變數名新增引數型別:
Func(double, double, double)twoParamsWithType = (double x,double y) => x*y;
Console.WriteLine(twoParamsWithType (3,2));
多行程式碼:
如果Lambda表示式只有一條語句,在方法塊內就不需要花括號和return語句,因為編譯器會新增一條隱式的return語句:
Func square = x => x*x;
但是新增花括號、return語句以及分號是完全合法的:
Func square = x =>
{
return x*x;
};
但是如果Lambda表示式的實現程式碼中需要多條語句,就必須新增花括號和return語句:
Func lambda = param =>
{
param += mid;
param += " fuck";
return param;
};
注意:如果使用了花括號,一定不要忘了花括號後面的分號!!!
在上述的內容中,多次使用了Func,詳細內容請見部落格Func<>委託。