1. 程式人生 > >淺析C#中的Lambda表示式

淺析C#中的Lambda表示式

上文中用了一點篇幅講述了匿名方法的使用。自從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<>委託