綜合評(píng)級(jí):
《ASP.NET 4.0從入門(mén)到精通》第3章C# 4.0語(yǔ)言特色,本章討論在C# 4.0語(yǔ)言中許多增強(qiáng)的功能。首先介紹隱式類(lèi)型聲明,由編譯器根據(jù)上下文進(jìn)行類(lèi)型推斷,接下來(lái)討論使用自動(dòng)屬性功能簡(jiǎn)化編寫(xiě)重復(fù)性的屬性代碼。對(duì)象初始化器可以簡(jiǎn)化開(kāi)發(fā)人員的賦值代碼,接下來(lái)討論如何對(duì)一個(gè)現(xiàn)有類(lèi)進(jìn)行擴(kuò)展的擴(kuò)展方法。本節(jié)為大家介紹Lambda表達(dá)式。
3.7 Lambda表達(dá)式
在C# 2.0中,引入了一個(gè)匿名方法的特性,使開(kāi)發(fā)人員可以直接為委托添加方法語(yǔ)句塊,而不需要顯式地創(chuàng)建一個(gè)單獨(dú)的方法。在C# 4.0中,提供了一個(gè)更加簡(jiǎn)法的方法來(lái)處理.NET中的委托類(lèi)型,即Lambda表達(dá)式。
3.7.1 理解Lambda表達(dá)式(1)
【范例3.21】為了更好地講述Lambda表達(dá)式以便于理解,在本小節(jié)同樣先創(chuàng)建一個(gè)控制臺(tái)應(yīng)用程序,命名為L(zhǎng)ambdaDemo。在本示例中,首先舉一個(gè)匿名方法的例子,然后看看Lambda表達(dá)式是如何聲明并簡(jiǎn)化匿名方法的代碼的。
首先舉一個(gè)傳統(tǒng)的使用委托的例子。在泛型List中,有一個(gè)重載的FindAll方法,該方法的一個(gè)重載版本接受一個(gè)謂詞委托,也就是一個(gè)用一個(gè)委托作為參數(shù),開(kāi)發(fā)人員需要?jiǎng)?chuàng)建一個(gè)單獨(dú)的方法來(lái)傳遞給FindAll方法,以便對(duì)List中的每個(gè)項(xiàng)進(jìn)行判斷。示例代碼如下所示:
- 01 using System;
- 02 using System.Collections.Generic;
- 03 using System.Linq;
- 04 using System.Text;
- 05 namespace LambdaDemo
- 06 {
- 07 class Program
- 08 {
- 09 static void Main(string[] args)
- 10 {
- 11 Console.WriteLine("傳統(tǒng)的委托代碼示例, 運(yùn)行結(jié)果為:");
- 12 FindListDelegate();
- 13 }
- 14 //傳統(tǒng)的調(diào)用委托的示例
- 15 static void FindListDelegate()
- 16 {
- 17 //先創(chuàng)建一個(gè)泛型的List類(lèi)
- 18 List<string> list = new List<string>();
- 19 list.AddRange(new string[] {"語(yǔ)言書(shū)",
"軟件書(shū)","政治","圖書(shū)","開(kāi)發(fā)人員"});- 20 Predicate<string> findPredicate = new
Predicate<string>(IsBookCategory);- 21 List<string> bookCategory = list.
FindAll(findPredicate);- 22 foreach (string str in bookCategory)
- 23 {
- 24 Console.WriteLine("{0}\t", str);
- 25 }
- 26 }
- 27 //謂詞方法, 這個(gè)方法將被傳遞給FindAll方法進(jìn)行書(shū)籍分類(lèi)的判斷
- 28 static bool IsBookCategory(string str)
- 29 {
- 30 return str.EndsWith("書(shū)") ? true : false;
- 31 }
- 32 }
- 33 }
【代碼解析】在這段代碼中,為Predicate<string>委托創(chuàng)建了一個(gè)單獨(dú)的方法IsBookCategory,這個(gè)方法判斷字符串中是否以“書(shū)”這個(gè)字符結(jié)尾,如果是,則表示符合查詢的要求,否則將進(jìn)行排除。這段代碼的運(yùn)行效果如圖3.18所示。
![]() |
(點(diǎn)擊查看大圖)圖3.18 傳統(tǒng)的委托方法的運(yùn)行示例 |
- //使用匿名方法來(lái)進(jìn)行搜索過(guò)程
- static void FindListAnonymousMethod()
- {
- //先創(chuàng)建一個(gè)泛型的List類(lèi)
- List<string> list = new List<string>();
- list.AddRange(new string[] {"語(yǔ)言書(shū)", "軟件書(shū)", "政治", "圖書(shū)", "開(kāi)發(fā)人員" });
- //在這里, 使用匿名方法直接為委托創(chuàng)建一個(gè)代碼塊, 而不用去創(chuàng)建單獨(dú)的方法
- List<string> bookCategory = list.FindAll
- (delegate(string str)
- {
- return str.EndsWith("書(shū)") ? true : false;
- }
- );
- foreach (string str in bookCategory)
- {
- Console.WriteLine("{0}\t", str);
- }
- }
聯(lián)系客服