Func<T, TResult>泛型委托

原本以为这个委托需要两个参数,汗,现在总算是弄清楚正确了,Func<T,TResult>是一个只需要一个参数的委托,其参数类型为T,返回值类型会TResult... 

用Lambda写的形式是:(T类型对象的参数) => (表达式,结果类型为TResult)。

在用Func<T,TResult>做参数的情况下可以参照如下写法:

 

int[] array=new int[]{... ...};

var result
=array.Where(n=>n==5);

 

 

因为这里的where是IEnumerable接口的扩展方法,签名为:

public static IEnumerable<TSource> Where<TSource>(this IEnumerable<TSource> source,Func<TSource, bool> predicate)
在这里,类型T为数据源array中数据项的类型int了(这个是因为.Net“扩展方法”的机制),
在Lambda表达式 n=>n==5中,n是参数,一个临时变量,n==5表达式结果自然是bool类型,可能这样写更直观些:(n)=>(n==5)
Lambda运算符 =>的前面是参数列表,后面是表达式。
理解了这个Func泛型委托,其他的几个.Net中的泛型委托就很好理解了。

建议:要透彻理解 linq,必须要先了解:Lambda、扩展方法、泛型委托等等C#3.0的一些新机制。

不懂的话,可以去看下园子里大大们的文章。这里可以参考:linq to sql系列教程 预备知识

我是刚开始接触到这部分东西,linq,entity framework,lambda......总有一点东西不明白,那语法有点陌生,再加上没有系统的学习,遇到一点问题就解决一点。。。

然后这两天看了一些委托、函数编程等等,今下午又看了园子里的一个linq to sql系列教程,这些问题迎刃而解,\(^o^)/~ 

 

作者的这句话真是正确啊 :

 要学好LINQ查询语法,就不得不先理解C# 3.0的一些新特性

posted on 2010-05-12 18:01  老鸵  阅读(563)  评论(2编辑  收藏  举报

导航