.NET方法演化史 從Delegate到Lambda再到LINQ
在最近比較新的項(xiàng)目中,已經(jīng)開(kāi)始在大量使用LINQtoSQL了。LINQ旨在成為,在.NET中,訪問(wèn)不同類型數(shù)據(jù)源的統(tǒng)一標(biāo)準(zhǔn)。我個(gè)人不贊同,也不希望如此。有些時(shí)候,一個(gè)龐大的殺毒軟件,還不如一個(gè)幾十K的專殺工具來(lái)的輕便。當(dāng)然,LINQ的優(yōu)勢(shì),在于對(duì)結(jié)構(gòu)化數(shù)據(jù)的處理.
于是就有了:
LINQ to Object
LINQ to XML
LINQ to SQL
這些目標(biāo)數(shù)據(jù)源共同特性之一----較強(qiáng)的結(jié)構(gòu)性。
........從LINQ追溯Lambda
- //LINQtoObject
- IEnumerablefilteredResult=fromcustomerincustomers
- wherecustomer.FirstName=="Donna"
- selectcustomer;
上面是一個(gè)很簡(jiǎn)單的LINQtoObject.有的人就會(huì)說(shuō),這和我用一個(gè)foreach的工作量差不多啊!如果你這樣想,就太小瞧他了.配合join..onorderbyletnestingwhere,效率的提高,那不是一點(diǎn)點(diǎn)了哈.:)
具體的例子,不需要給出。點(diǎn)到即可。
LINQ中的filter,是從LambdaExpression演化而來(lái).
上面的例子稍作變化,就可以看到我們親切的Lambda了.
- Lambda在LINQ
- //StatementLambdasinLINQ
- IEnumerablefilteredResult=(fromcustomerincustomers
- selectcustomer).Where(c=>c.FirstName.Equals("Donna"));
........從Lambda追溯Delegate
LambdaExpression是C#3.0中出現(xiàn)的神奇之物,它由C#2.0中的匿名函數(shù)演化而來(lái)。同時(shí),也將匿名函數(shù)的作用,發(fā)揮到了***.有了它,我們甚至都可以不用指定參數(shù)的類型。
- BubbleSort(items,
- (firstItem,secondItem)=>
- {
- returnfirstItem});
回想一下,在C#2.0中,我們是如何使用匿名函數(shù)的:
- BubbleSort(items,
- delegate(intfirstItem,intsecondItem)
- {
- returnfirstItem});
至于C#1.1中的代理,我不想回憶了,太痛苦:<
不僅方法不能省,還要使用被代理函數(shù)的作為參數(shù),構(gòu)造代理對(duì)象.
【編輯推薦】