C# Lambda表達(dá)式

2021-12-06 16:36 更新

C# Lambda表達(dá)式

lambda表達(dá)式是一個(gè)未命名的方法,代替一個(gè)委托實(shí)例。

給定以下委托類型:

delegate int Converter (int i);

我們可以如下分配和調(diào)用lambda表達(dá)式x => x * x:

Converter sqr = x => x * x;
Console.WriteLine (sqr(3)); // 9

lambda表達(dá)式具有以下形式:

(parameters) => expression
We can omit the parentheses if and only if there is exactly one
parameter of an inferable type.

在我們的示例中,有一個(gè)參數(shù), x ,表達(dá)式為 x * x :

x => x * x;

lambda表達(dá)式的每個(gè)參數(shù)都對(duì)應(yīng)一個(gè)委托參數(shù),表達(dá)式的類型對(duì)應(yīng)于委托的返回類型。

在上面的代碼中, x 對(duì)應(yīng)于參數(shù) i ,表達(dá)式 x * x 對(duì)應(yīng)于返回類型 int ,因此它與 Converter 委托兼容,如下所示:

delegate int Converter (int i);

lambda表達(dá)式的代碼可以是語(yǔ)句塊而不是表達(dá)式。

x => { return x * x; };

Lambda表達(dá)式最常用于Func和Action委托。

我們可以重寫上面的代碼如下:

Func<int,int> sqr = x => x * x;

下面是一個(gè)接受兩個(gè)參數(shù)的表達(dá)式示例:

Func<string,string,int> totalLength = (s1, s2) => s1.Length + s2.Length;
int total = totalLength ("a", "the"); 

捕獲外部變量

lambda表達(dá)式可以引用定義它的方法的局部變量和參數(shù)。

例如:

static void Main(){
   int factor = 2;
   Func<int, int> multiplier = n => n * factor;
   Console.WriteLine (multiplier (3)); // 6
}

由lambda表達(dá)式引用的外部變量稱為捕獲變量。

捕獲變量的lambda表達(dá)式稱為閉包。

捕獲的變量在實(shí)際調(diào)用委托時(shí)求值,而不是在捕獲變量時(shí)求值:

int factor = 2;
Func<int, int> multiplier = n => n * factor;
factor = 3;
Console.WriteLine (multiplier (3)); // 9

Lambda表達(dá)式可以更新捕獲的變量:

int outerVariable = 0;
Func<int> myLambda = () => outerVariable++;
Console.WriteLine (myLambda()); // 0
Console.WriteLine (myLambda()); // 1
Console.WriteLine (outerVariable); // 2

匿名方法

要編寫匿名方法,請(qǐng)包括delegate關(guān)鍵字,隨后可以包含參數(shù)聲明,然后是方法體。

例如,給這個(gè)代理:

delegate int Converter (int i);

我們可以寫和調(diào)用匿名方法如下:

Converter sqr = delegate (int x) {return x * x;};
Console.WriteLine (sqr(3)); // 9

第一行在語(yǔ)義上等同于以下lambda表達(dá)式:

Converter sqr = (int x) => {return x * x;};

或者簡(jiǎn)單為:

Converter sqr = x => x * x;

匿名方法以與lambda表達(dá)式相同的方式捕獲外部變量。

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)