亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

C#3.0中Lambda表達式詳解

2020-01-24 03:09:08
字體:
來源:轉載
供稿:網友

在C#2.0中,微軟給我們帶來了一些新的特性,例如泛型,匿名委托等。然而,這些新的特性多多少少會給人一種從別的語言中“抄”來的感覺(例如泛型類似C++的模板,一些特性類似Java中的一些東西)。但是在C#3.0中,微軟給我帶來的一些新特性可能是以前所有開發語言都沒有的特性。這無疑大大的體現了C#3.0在開發語言中強大的優勢。

Lambda表達式

Lambda 表達式是一個匿名函數,它可以包含表達式和語句,并且可用于創建委托或表達式目錄樹類型。所有 Lambda 表達式都使用 Lambda 運算符 =>。關于Lambda更詳細的講解大家可以參看 MSDN。里面說的很清楚。

這里簡單舉個例子來說明Lambda的好處。Lambda在對匿名委托的處理上提供了更清楚的實施方式。例如在2.0中。我們可以寫這樣的代碼:

publicclassExample { publicstaticvoidDemo(System.Windows.Controls.TextBlockoutputBlock) { Funcconvert=delegate(strings) {returns.ToUpper();}; stringname="Dakota"; outputBlock.Text+=convert(name)+"n"; } }

在 C# 中將 Func<(Of <(T, TResult>)>) 委托與匿名方法一起使用。

在3.0中,我們可以使用Lambda來更清楚的進行參數的傳遞:

publicclassExample { publicstaticvoidDemo(System.Windows.Controls.TextBlockoutputBlock) { Funcconvert=s=>s.ToUpper(); stringname="Dakota"; outputBlock.Text+=convert(name)+"n"; } }

Lambda 表達式的基礎類型是泛型 Func 委托之一。這樣能以參數形式傳遞 lambda 表達式,而不用顯式將其分配給委托。尤其是,因為 System.Linq 命名空間中許多類型方法具有 Func<(Of <(T, TResult>)>) 參數,因此可以給這些方法傳遞 lambda 表達式,而不用顯式實例化 Func<(Of <(T, TResult>)>) 委托。這樣可以使我們的代碼更加簡潔,邏輯上更易于理解。

對象的初始化

在C#中,對象的初始化也做了一些改進。一個新的功能就是提供了更方便的語法規則來聲明變量的值。

假如我們聲明一個Student對象:

publicclassStudent { privatestring_stuName; privatestring_stuAge; privateint_stuClass; publicStudent(){} publicstringStuName { get{return_stuName;} set{_stuName=value;} } publicstringStuAge { get{return_stuAge;} set{_stuAge=value;} } publicintStuClass { get{return_stuClass;} set{_stuClass=value;} } }

在C#2.0中,我們是這樣聲明變量并賦值的:

Studentstu=newStudent(); stu.StuName="Brian"; stu.StuAge="21"; stu.StuClass="1班";

而在C#3.0中,我們可以這樣初始化對象:

Studentstu2=newStudent { StuName="Brian", StuAge="21", StuClass="1班" };

從代碼中不難看出,C#3.0給我們提供了很方便得方式來進行對象的初始化工作。

查詢

這個想必大家都應該有所耳聞,那就是鼎鼎大名的Linq。這是C#3.0中最獨特好用的新特性之一。Linq改變了我們寫數據應用程序的方式,先前,開發人員需要考慮并編寫不用的代碼來處理不同數據源中的數據(SQL Server ,XML ,Memory....)。LINQ很好的幫我們解決了這個煩人的問題。同時借助Lambda,我們可以更方便準確的查詢我們想要的數據。

使用Linq簡單的數據查詢例子:

privatevoidBindGridView(stringcriteria) { stringstrConn=ConfigurationManager.ConnectionStrings["connstr"].ConnectionString; NorthwindDbdb=newNorthwindDb(strConn); IEnumerableresults; if(criteria==string.Empty) { results=db.Employee.ToArray(); } else { results=(fromcindb.Employee wherec.FirstName.Contains(criteria) selectc).ToArray(); } GridView1.DataSource=results; GridView1.DataBind(); }

變量聲明

這里要說的是var。var是C#3.0中提供的用于聲明變量的關鍵字,開發人員可以不考慮變量的類型就可以對變量進行聲明(這一點用法非常類似Javascript)。但是兩者還是有些差異。

相同點:用var來聲明任何類型的局部變量。

不同點:它僅僅負責告訴編譯器,該變量需要根據初始化表達式來推斷變量的類型,而且只能是局部變量。

我們可以這樣聲明變量:

vari=10; varname="edisundong"; varnumbers=newint[]{1,2,3};

var僅僅是個關鍵字,它并不是C#3.0中的一種新的類型,而是負責告訴編譯器,該變量需要根據初始化表達式來推斷變量的類型,上面的語句相當于

inti=10; stringname="edisundong"; int[]numbers=newint[]{1,2,3};

這里還需要注意幾點:

1.在聲明時必須同時賦值。

2.在使用var聲明一個局部變量后,他仍然具備強類型。

varinteger=10;
integer="edisundong";

編譯時會報Cannot implicitly convert type string to int錯誤。

3. 初始化器表達式的編譯期類型不能夠是空(null)類型。
4. var的聲明僅限于局部變量

擴展方法

以前如果我們想擴展一個類的功能必須直接源自于它并且從學其中的方法,在C#3.0中,介紹了一種很快捷的擴展功能的方法。

publicstaticclassStudentExtensionMethods { publicStudentExtensionMethods() { // //TODO:在此處添加構造函數邏輯 // } publicstaticstringGetStudentInformation(thisStudentstu) { returnstring.Format("Name:{0}{1}Age:{2}",stu.StuName, stu.StuAge,stu.StuClass); } }

定義一個類,其中定義一個方法,注意:這個類和方法都是static的,并且方法的參數是類Student。這樣,Student類就可以擴展GetStudentInformation方法:

Studentstu2=newStudent { StuName="Brian", StuAge="12", StuClass="1班" }; Console.WriteLine(stu2.GetPersonInformation());

小結:初學了下C#3.0,感覺帶來了不少驚喜,其中有很多新的特性是以前所未知的。C#3.0的新特性應該還不止這些,還需繼續學習研究。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
97在线观看视频国产| 国产视频精品va久久久久久| 精品国产一区二区三区久久久| 精品少妇一区二区30p| 亚洲精品中文字幕av| 97精品久久久中文字幕免费| 欧美精品第一页在线播放| 久久视频在线观看免费| 欧美精品一区二区三区国产精品| 免费不卡在线观看av| 97视频在线观看视频免费视频| 亚洲精品aⅴ中文字幕乱码| 亚洲男女自偷自拍图片另类| 亚洲精品97久久| 国产专区精品视频| 成人激情免费在线| 欧美另类极品videosbestfree| 一区二区三区天堂av| 日韩电影免费观看中文字幕| 欧美激情久久久久| 久久久久久久久久久免费精品| 九九九热精品免费视频观看网站| 欧美重口另类videos人妖| 日韩av在线免费播放| 亚洲欧美在线一区| 亚洲三级黄色在线观看| 日本高清视频精品| 国产精品中文久久久久久久| 亚洲男人7777| 欧美大片免费观看在线观看网站推荐| 国产精品第七影院| 奇米四色中文综合久久| 日韩av在线一区二区| 亚洲欧美中文日韩v在线观看| 亚洲天堂av电影| 色婷婷综合成人| 国产欧美精品一区二区| 欧美激情综合色综合啪啪五月| 91在线观看免费高清| 亚洲精品狠狠操| 亚洲色图狂野欧美| 91av视频在线| 欧美一级片久久久久久久| 亚洲xxxx视频| 日韩精品中文在线观看| 国产精品成人一区二区三区吃奶| 北条麻妃久久精品| 亚洲综合在线播放| 久久精品99国产精品酒店日本| 日韩成人小视频| 日韩欧美成人区| 亚洲欧美中文日韩v在线观看| 欧美一级电影免费在线观看| 国产日韩欧美电影在线观看| 91精品国产综合久久香蕉的用户体验| 欧美一级在线亚洲天堂| 日韩av大片在线| 亚洲欧美日韩一区二区三区在线| 久久成人av网站| 国产亚洲视频中文字幕视频| 日韩精品极品毛片系列视频| 欧美激情视频网站| 久久影院资源站| 久久综合国产精品台湾中文娱乐网| 欧美性色19p| 亚洲第一天堂av| 国产精品亚洲美女av网站| 川上优av一区二区线观看| 欧美大码xxxx| 91网站免费看| 久久精品国产2020观看福利| 欧美日韩激情美女| 欧美国产中文字幕| 国产精品丝袜久久久久久高清| 在线播放国产一区二区三区| 岛国av一区二区三区| 欧美一级免费看| 久久人人爽人人爽人人片av高清| 久久99热精品| 国产精品热视频| 成人在线精品视频| 亚洲天堂av综合网| 欧美一级黄色网| 欧美一级大片在线观看| 国产精品久久久久久超碰| 国内外成人免费激情在线视频网站| 亚洲精品久久久久久久久久久久久| 欧美激情综合色综合啪啪五月| 久久视频在线播放| 久久中文字幕在线| 日韩精品在线看| 日韩毛片在线观看| 亚洲肉体裸体xxxx137| 久久噜噜噜精品国产亚洲综合| 久久夜色精品国产| 亚洲激情电影中文字幕| 久久久最新网址| 亚洲视频在线免费观看| 成人激情春色网| 欧美极品少妇xxxxⅹ免费视频| 欧美高清视频一区二区| 日本精品在线视频| 国产精品吊钟奶在线| 欧美最猛性xxxxx亚洲精品| 亚洲精品永久免费精品| 日韩精品中文字幕在线| 欧美激情亚洲精品| 色综合色综合久久综合频道88| www.久久久久久.com| 亚洲精品免费网站| 中文字幕亚洲无线码a| 亚洲国产精品推荐| 久久久伊人欧美| 欧美猛交ⅹxxx乱大交视频| 国产精品一区二区电影| 日日骚av一区| 亚州国产精品久久久| 久久久久久久久久国产精品| 亚洲电影免费观看高清完整版在线观看| 日韩美女在线看| 欧美精品手机在线| 久热国产精品视频| 中文字幕日韩综合av| 91av在线精品| 裸体女人亚洲精品一区| 欧美国产欧美亚洲国产日韩mv天天看完整| 91久久在线观看| 成人黄色中文字幕| 国产精品pans私拍| 亚洲第一区在线观看| 97精品国产97久久久久久| 精品亚洲一区二区| 91精品国产成人| 久久久国产一区二区三区| 久久精品91久久香蕉加勒比| 久色乳综合思思在线视频| 亚洲国产精品久久久| 久久69精品久久久久久久电影好| 久久久伊人欧美| 欧美国产日韩一区二区在线观看| 国产精品96久久久久久又黄又硬| 国产精品丝袜一区二区三区| 欧美精品videosex牲欧美| 欧美激情中文网| 国产成人97精品免费看片| 色偷偷88888欧美精品久久久| 亚洲精品久久久久| 久久福利网址导航| 91精品久久久久久久久不口人| 国产精品爽爽ⅴa在线观看| 26uuu国产精品视频| 亚洲第一天堂av| 国产一区二区三区在线观看视频| 国产在线精品成人一区二区三区| 欧美亚洲激情视频| 国产一区二区香蕉| 精品高清美女精品国产区| 久久精品国产久精国产思思| 欧美性猛xxx| 国产成人综合精品在线| 日韩在线激情视频| 亚洲国产另类 国产精品国产免费| 日韩av片免费在线观看| 日韩欧美精品网站|