您的位置:首页 > 其它

NET基础课--对象的筛选和排序(NET之美)

2015-10-18 09:59 316 查看
1.数据量不大的时候取出数据缓存于服务器,然后排序,筛选等基于缓存进行以提高效率。

排序或筛选的方法是使用集合类型提供的,如List<T>.sort() List<T>.Findall()

2.筛选方法: List<T>.FindAll(Predicate<T> match)

讲解:Predicate<T>封装筛选的规则,它的位置是在参数类型上,能个定义成这样的类型的必然是委托。

它的定义:public delegate bool Predicate<T>(T obj)

使用举例:假设现有集合 list<order>,T即order,那么你的筛选方法的参数就是order类型变量。

筛选方法的可能原型就是: public bool MatchRule(order item);

筛选就意味着有外部条件,对order来说,年 月 日 国家 供应商等等都是。 那如何将筛选方法和条件进行整合呢?

定义一个类。构造函数中的参数就是这些条件。然 后用order中的属性来和参数进行比较。

书的作者把此类定义为泛型类,MatchRule定义为泛型方法,此泛型类要求类型实现一个接口,接口中有一属性Date,

类型为datetime,目的是在泛型MatchRule方法中可以写如下代码:

public bool  MatchRule(T item)
{
if (year!=0 && year!=item.Date.Year)
return false;
}


3.排序:使用list<T>.sort方法。要求T实现IComparable<T>接口来提供默认排序。

此处举例:Order来实现这个接口。

public int CompareTo(order other)
{
//说明:其实类实现这个接口 把比较交给了属性客户ID,也就是string类型的比较
// 基础类型几乎都实现了IComparable接口,直接调用它们类型的比较即可
return this.CustomerId.CompareTo(other.CustomerId)
}


 高级排序:

多个列组合及升序降序等要求。建议实现ICompare<T>接口。传递两个同类型对象及比较规则来排序。例子可以参考msdn。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: