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