.NET方法演化史 从Delegate到Lambda再到LINQ

  本文将介绍.NET方法演化史,从DelegateLambda再到LINQ。其中LINQ旨在成为,在 .NET 中,访问不同类型数据源的统一标准。希望对大家有所帮助。

  在最近比较新的项目中,已经开始在大量使用LINQtoSQL了。LINQ旨在成为,在.NET中,访问不同类型数据源的统一标准。我个人不赞同,也不希望如此。有些时候,一个庞大的杀毒软件,还不如一个几十K的专杀工具来的轻便。当然,LINQ的优势,在于对结构化数据的处理.

  于是就有了:

  LINQ to Object

  LINQ to XML

  LINQ to SQL

  这些目标数据源共同特性之一----较强的结构性。

  ........LINQ追溯Lambda

  1. //LINQtoObject  
  2. IEnumerable filteredResult=from customer in customers 
  3. where customer.FirstName=="Donna"  
  4. selectcustomer; 

  上面是一个很简单的LINQtoObject.有的人就会说,这和我用一个foreach的工作量差不多啊!如果你这样想,就太小瞧他了.配合join..onorderbyletnestingwhere,效率的提高,那不是一点点了哈.:)

  具体的例子,不需要给出。点到即可。

  LINQ中的filter,是从LambdaExpression演化而来.

  上面的例子稍作变化,就可以看到我们亲切的Lambda.

  1. LambdaLINQ  
  2. //StatementLambdasinLINQ  
  3. IEnumerable filteredResult=(from customer in customers  
  4. select customer).Where(c=>c.FirstName.Equals("Donna")); 

  ........Lambda追溯Delegate

  LambdaExpressionC#3.0中出现的神奇之物,它由C#2.0中的匿名函数演化而来。同时,也将匿名函数的作用,发挥到了极致.有了它,我们甚至都可以不用指定参数的类型。

  1. BubbleSort(items,  
  2. (firstItem,secondItem)=> 
  3. {  
  4. returnfirstItem}); 

  回想一下,在C#2.0中,我们是如何使用匿名函数的:

  1. BubbleSort(items,  
  2. delegate(intfirstItem,intsecondItem)  
  3. {  
  4. returnfirstItem}); 

  至于C#1.1中的代理,我不想回忆了,太痛苦:<

  不仅方法不能省,还要使用被代理函数的作为参数,构造代理对象.

 

 

展开阅读全文

没有更多推荐了,返回首页