c#之winform—listview中排序 和 ICompare接口和IComparer接口的比较

发布时间 2023-04-11 15:41:56作者: 小颜七七

要在listview中实现排序,需要用listview.Sorting属性,它接受一个枚举类型的值

list_view.Sorting = SortOrder.Ascending; // 1 为正序>

其中

    None = 0,   // 不排序

    Ascending = 1,  //升序

    Descending = 2  //降序

然后在将ListViewItemComparer这个类的实例赋给listview的ListViewItemSorter属性,实现列表排序功能

list_view.ListViewItemSorter = new ListViewItemComparer(SortOrder.Descending, e.Column); //点击那一列,e.Column就等于几

!!要注意 ListViewItemComparer这个类继承了IComparer接口,所以必须续写ICompare接口中唯一的方法Compare()

这个Compare(object x, object y)方法需要两个object类型的参数

然后返回一个int类型的值(0或者正整数或者负整数),用来代表排序结果
(注:要比较几次,系统就会自己调用Compare方法几次,不需要人工手动调用)

!!!注意!!!
不要弄混Compare(object a ,object b)和CompareTo(object x)

Compare(object a ,object b)是IComparable接口中的方法
CompareTo(object x)是ICompare接口中的方法
二者接受的参数不同,但都返回一个int类型的值,都用于排序

接口 IComparable ICompare
方法 CompareTo(object x ) Compare(object a ,object b)
参数 一个参数 两个参数
返回值 一个int类型的值 一个int类型的值
翻译为 可比较对象 比较器
习惯用法 新的“类”,要比较这个类中的成员,和Sort()搭配使用