.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来。
首先看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来。
相关文章推荐
- 黑马程序员---Dictionary<>字典,List<>泛型集合实例练习
- Asp.net MVC 3实例学习之ExtShop(一)————创建应用并设置开发环境
- Asp.net MVC 3实例学习之ExtShop(一)————创建应用并设置开发环境
- Asp.net MVC 3实例学习之ExtShop(一)————创建应用并设置开发环境
- Asp.net MVC 3实例学习之ExtShop(一)――――创建应用并设置开发环境
- Asp.net MVC 3实例学习之ExtShop(一)————创建应用并设置开发环境
- BaseDAO开发及获取泛型的传输数据类型(Class<T>)实例讲解
- [转]WinForm DataGridView 绑定泛型List(List<T>)/ArrayList不显示的原因和解决
- asp.net对List<string>列表排序的写法
- 利用反射实现mysql数据库sql查询 返回List<E>泛型(持久化)对象
- arcgis api for flex 开发入门(一)环境搭建<转>
- JDBC的项目开发实例<轻量级封装>
- 转:ASP.NET MVC 将IList<T>导出Excel文档的泛型类
- System.Collections.Generic.List<>是System.Collections.ArrayList的泛型实现
- 是否应该考虑改变下<奔腾红河>的服务器构架形式和开发环境.
- 自己编写的泛型List<T>功能代码 欢迎高手指点
- Android React-Native系列之<一>零基础搭建React-Native开发环境
- 一步一步教你使用AgileEAS.NET基础类库进行应用开发-WinForm应用篇-实例一个模块(商品字典)
- S3C2440 LCD驱动(FrameBuffer)实例开发<一>
- C# 将DataTable装换位List<T> 泛型