日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > asp.net >内容正文

asp.net

.Net - Lambda 表达式

發(fā)布時(shí)間:2025/4/14 asp.net 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 .Net - Lambda 表达式 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

原文地址 http://news.newhua.com/news1/programming/2007/912/0791210105992GHF3CH3E627648888G.html

隨著歲月的流逝,VS也從2005慢慢的步入2008,.NET也將進(jìn)入3.5版本,學(xué)習(xí)的腳步也要慢慢趕上。今天我們來(lái)看看C#3.0的又一特性Lambda表達(dá)式,它由2.0代理演化而來(lái),也是為L(zhǎng)inQ做好必要的準(zhǔn)備。Lambda表達(dá)式首先我們要知道他的運(yùn)算符“=>”,在我以前的一篇文章中可以得到在不同版本中所使用代理和通過(guò)Lambda表達(dá)式的一個(gè)例子,你可以在這里看到:[C#3.0]新特性概覽.今天我們舉個(gè)另外的例子,讓我們更好的理解這個(gè)Lambda表達(dá)式,因?yàn)槲覀冊(cè)贚inQ中會(huì)經(jīng)常用到這個(gè)東東,所以就應(yīng)該好好看看,況且這也不是什么難事。

我們?cè)赱.NET 3.x新特性一]自動(dòng)屬性,對(duì)象初始化及集合初始化中講到了自動(dòng)化屬性和集合的初始化,為了講解Lambda表達(dá)式我們首先定義一個(gè)實(shí)體類,代碼如下:

public?? class? Person
{
? public?string?Name {?get ;? set; }
? public?string?NickName {?get ;? set ; }
? public?int?Age {?get;? set ; }
}

我們將其初始化一個(gè)List 列表,并從中獲取Age為23的Person實(shí)例和類表中所有實(shí)例中Age的平均值。當(dāng)然其中也用到了擴(kuò)展方法,這也是屬于LinQ的一個(gè)范疇,代碼如下:

List < Person >? people? =?? new? List < Person >
{

? new? Person{Name = "Dong" ,NickName = "Boss" ,Age =?80 }
? new? Person{Name = "Max" ,NickName = ".Net Engineer" ,Age = 25 },

? new? Person{Name = "George" ,NickName = "Test Engineer" ,Age = 25 },?

? new? Person{Name = "Jean" ,NickName = "Test Engineer" ,Age =?24 },
? new? Person{Name = "Tommy" ,NickName = "Java Engineer" ,Age =?26 }
};

// 取得people中Age為23的Person實(shí)例。
IEnumerable<Person>?results = people.Where(p? =>? p.Age ==?23 );

// 計(jì)算people中的平均歲數(shù)。
int?perAge?=?(int)people.Average(p =>?p.Age);

?

看到Lambda表達(dá)式了嗎?p=>p這個(gè)就是Lambda表達(dá)式,當(dāng)然Where和Average就是擴(kuò)展方法,是LinQ的一個(gè)擴(kuò)展方法。

?

當(dāng)然我們?cè)贑#或者說(shuō)在.NET 2.0中也能夠做到,但是可沒(méi)有那么簡(jiǎn)單(其實(shí)也不難),下面我們看一下在.NET 2.0中的實(shí)現(xiàn)方法:

List <Person>? people? =?? new? List < Person >
{

? new? Person{Name = "Dong" ,NickName = "Boss" ,Age =?80 }
? new? Person{Name = "Max" ,NickName = ".Net Engineer" ,Age = 25 },

? new? Person{Name = "George" ,NickName = "Test Engineer" ,Age = 25 },?

? new? Person{Name = "Jean" ,NickName = "Test Engineer" ,Age =?24 },
? new? Person{Name = "Tommy" ,NickName = "Java Engineer" ,Age =?26 }
};

IEnumerable<Person>?results?=?people.Where(delegate(Person p) { return?p.Age ==?25; });
int? perAge? =? people.Sum( delegate (Person p) {? return? p.Age; });

從上面我們也能夠做到同樣的效果,但是代碼比用Lambda復(fù)雜了一點(diǎn)。下面我們看看這種代理方法的擴(kuò)展是如何實(shí)現(xiàn)的呢?首先我們當(dāng)然是右鍵選擇"轉(zhuǎn)到定義"就可以看到Where的擴(kuò)展:

public?static?IEnumerable <TSource>? Where <TSource> (this? IEnumerable <TSource>? source, Func <TSource,? bool>? predicate);
public?static?IEnumerable <TSource>? Where <TSource> (this? IEnumerable <TSource>? source, Func <TSource,? int ,? bool>? predicate);

我們來(lái)看看Where的代碼:

public?static?IEnumerable <TSource> Where <TSource> (this? IEnumerable <TSource>? source,Func <TSource,? bool>? predicate)
{
? foreach? (TSource s? in? source)
? {
??? if(predicate(s))
??? {
????? yield? return? s;
??? }
? }
}

從上面的代碼中我們可以看出是對(duì)IEnumerable的擴(kuò)展,而predicate是一個(gè)Func 的代理,Func代理的第二個(gè)類型是返回的類型,而第一個(gè)類型是參數(shù)的類型。如果是Func 則最后一個(gè)是代理返回的類型(就是這個(gè)代理方法執(zhí)行后的結(jié)果),其他都是參數(shù)(代理方法的參數(shù),依次排列),就上述代碼而言predicate執(zhí)行后返回true的就迭代返回實(shí)例s。

OK今天就先記這么多 ^_^

轉(zhuǎn)載于:https://www.cnblogs.com/yoshow/archive/2007/11/23/969856.html

總結(jié)

以上是生活随笔為你收集整理的.Net - Lambda 表达式的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。