您的位置:首页 > 其它

.net开发环境中List<T>泛型的实例应用

2011-12-10 14:19 218 查看
在开发称重软件过程中,用到了各种各样的技术框架和概念,个人接触比较多点的还是List<T> 了,也比较感兴趣,毕竟.net中的List<T>非常方便,但是很遗憾是没有自带更方便的一些排序查找之类的函数,很多都得我们自己写函数,这非常的麻烦,其实这些方法想要的只是一个一句话的delegate而已。下面主要讨论三个方法,List<T>.Sort();List<T>.Find();List<T>.Exist();

首先看List<T>.Sort()。其定义是:public void Sort( Comparison<T> comparison );要求传入的参数是Comparison<T> comparison。那就看看Comparison<T> comparison 要求我们传入哪些参数以及返回什么样的值。查阅MSDN后,我们发现Comparison<T> 要求我们传入两个T的示例,即t1和t2;返回结果是整数,如果t1<t2返回-1,如果相等返回-,如果t1>t2返回1,和字符串比较的返回方式一样。于是我们可以这样设计delegate:listVideoItems.Sort(delegate(VideoItem v1, VideoItem v2) { return Comparer<string>.Default.Compare(v1.Title, v2.Title); });

上面的代码是对实体的Title属性进行排序,采用字符串比较的返回值作为delegate的返回值。

接下来我们看看List<T>.Find()和List<T>.Exist()

Find()的定义如下:public T Find( Predicate<T> match )

Exist也类似:public bool Exists( Predicate<T> match )

所以只要我们设计好Predicate<T> match 这个参数的delegate,Find()和Exists()这两个函数我们都可以用了。查询MSDN发现,Predicate<T> 要求我们传入一个T的实体,并返回这个T是不是存在的布尔结果。因此我们就可以写出:VideoItem video= listVideoItems.Find(delegate(VideoItem v) { return v.Title== "xxxxx"; }) 这代码表示按照标题查找实体,当然"xxxxx"可以替换成变量和硬代码。v.Title == "xxxxx" 这种方式也可以改为 v.Minutes > 25 或其他,只要能返回布尔结果即可。

同样的delegate也可以用在Exists()中:

bool flag= listVideoItems.Exists(delegate(VideoItem v) { return v.Minutes > 25 ;})

最后,List<T>当中还有一个非常好用的FindAll()方法,也相当好用,相信看完本文的朋友马上就能写出delegate来。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐