W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
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á)式相同的方式捕獲外部變量。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: