IComparable和ICompare 接口是.net framework 中比较对象的标准方式,这两个接口提供一个返回值类似(大于0 等于0 小于0)的比较方法,二者区别如下:
. IComparable 在要比较的对象的类中实现,可以比较该对象和另一个对象。
. IComparer 在一个单独的类中实现,可以比较任意两个对象。 先看 IComparable 这个接口方法是 int CompareTo(object obj); 方法只有一个参数,我们知道比较至少要有两个对象,所以这个方法只能应用在要比较的对象类中,参数传递的对象就可以和 this 做比较。
class obj : IComparable<obj>
{
public int age = ; public int CompareTo(obj other)
{
//return this.age.CompareTo(other.age);
//下面代码是此方法的具体实现 if (this.age == other.age)
{
return ;
}
else if (this.age > other.age)
{
return ;
}
else
{
return -;
}
}
} static void Main(string[] args)
{
obj a = new obj();
obj b = new obj(); a.CompareTo(b); // a.age = ;
a.CompareTo(b); // a.age = ;
a.CompareTo(b); // -1
}
接口IComparable主要是实现类对象间的比较规则。 再看IComparer 这个接口提供一个需要两个参数的方法,这个参数也再做比较运算,但是比较主要是为了为对象做排序而非为给类增加比较运算。
class obj
{
public int age = ;
} class objcomp : IComparer<obj>
{
public int Compare(obj x, obj y)
{
//return x.age.CompareTo(y.age);
//下面代码是此方法的具体实现 if (x.age == y.age)
{
return ;
}
else if (x.age > y.age)
{
return ;
}
else
{
return -;
}
}
} static void Main(string[] args)
{
List<obj> list = new List<obj>(); list.Add(new obj() { age = });
list.Add(new obj() { age = });
list.Add(new obj() { age = }); // 列表中元素原始顺序(按照age)50,20,40 list.Sort(new objcomp()); // public void Sort(IComparer<T> comparer);调用了Sort方法的重载版本 // 经过排序列表中元素顺序(按照age)20,40,50
}
当然了,如果你想更改排序规则按照降序排列可以交换 objcomp 中方法参数的 age 值大于和小于时的返回值。

对象的比较与排序:IComparable和IComparer接口的更多相关文章

  1. [0] 关于IComparable和IComparer接口和Comparer类

    关于IComparable和IComparer接口 和 Comparer类 IComparable和ICompareframeworkr接口是.net 中比较对象的标准方式,这两个接口之间的区别如下: ...

  2. C#中的IComparable 和 IComparer 接口,实现列表中的对象比较和排序

    借豆瓣某博主的话先对这两个接口进行一个解释: IComparable在要比较的对象的类中实现,可以比较该对象和另一个对象 IComparer在一个单独的类中实现,可以比较任意两个对象. 如果已经支持 ...

  3. 比较和排序 IComparable And IComparer

    1.List<Student>默认排序 为类创建默认排序实现IComparable,此代码的实现为年龄升序 using System; using System.Collections.G ...

  4. 数组自定义排序:IComparable和IComparer接口

    首先先说一下IComparable和IComparer的区别,前者必须在实体类中实现,后者可以单独出现在一个排序类中,即此类只包含一个compare方法. Array类使用快速算法对数组中的元素进行排 ...

  5. c# 实现IComparable、IComparer接口、Comparer类的详解

    在默认情况下,对象的Equals(object o)方法(基类Object提供),是比较两个对象变量是否引用同一对象.我们要必须我自己的对象,必须自己定义对象比较方式.IComparable和ICom ...

  6. IComparable和IComparer接口

    C#中,自定义类型,支持比较和排序,需要实现IComparable接口.IComparable接口存在一个名为CompareTo()的方法,接收类型为object的参数表示被比较对象,返回整型值:1表 ...

  7. C#的 IComparable 和 IComparer接口及ComparableTo方法的 区别(非常重要)

    (1)https://blog.csdn.net/ios99999/article/details/77800819 C# IComparable 和 IComparer 区别 (2)https:// ...

  8. 实现IComparable、IComparer接口

    using System;using System.Collections.Generic; public class MyClass{ public class Employee:IComparab ...

  9. c# IComparable与IComparer接口

随机推荐

  1. Mac Aria2 使用Privoxy将socks代理转化为http代理

    安装Privoxy 打开终端安装privoxy来实现这里我是通过brew来进行的安装 brew install privoxy 看到这行已经安装成功 ==> Caveats To have la ...

  2. mysql计算时间差函数

    MySql计算两个日期的时间差函数TIMESTAMPDIFF用法,只要用一句SQL语句就可以办到了. MySql计算两个日期的时间差函数TIMESTAMPDIFF用法: 语法: TIMESTAMPDI ...

  3. Lucene 工作原理 之倒排索引

      1.简介 倒排索引源于实际应用中需要根据属性的值来查找记录.这种索引表中的每一项都包括一个属性值和具有该属性值的各记录的地址.由于不是由记录来确定属性值,而是由属性值来确定记录的位置,因而称为倒排 ...

  4. 深入浅出讲解:php的socket通信

    对TCP/IP.UDP.Socket编程这些词你不会很陌生吧?随着网络技术的发展,这些词充斥着我们的耳朵.那么我想问:1.         什么是TCP/IP.UDP?2.         Socke ...

  5. 如何让table中td宽度固定

    table中td会随着里面的内容伸缩,设置其width样式并没有效果.这个时候需要下面的CSS可以实现. 首先是设置table .table {table-layout:fixed;} 其次是td . ...

  6. 对象化前端表单(Form)提交

    很常见的业务场景,就是前端一个表单,submit给后台,在web.form时代,有from 的runat="server" 配合submit 自动会提交给服务端,然后服务端解析Re ...

  7. 如何捕获access violation异常

    文章目录 access violation的由来 access violation的实例 Win32 exception SEH异常与C++标准异常 捕获方法 1.access violation的由 ...

  8. Sublime Text 3 汉化小技巧

    Sublime Text 3 简体中文汉化包使用方法 1.将下载的sublime_text3汉化包文件解压,得到的Default.sublime-package 文件.打开sublime text 3 ...

  9. android_demo之生成颜色布局

    前面学习了动态生成表格,不单单是要动态生成控件,也同时生成一个事件. 接下来用个小小栗子去了解这个知识点. <LinearLayout xmlns:android="http://sc ...

  10. 力软信息化系统快速开发框架 web端+winform端

    力软信息化系统快速开发框架是一套集权限管理+快速开发+动态接口+通用组件+动态UI于一体的全新.net信息化快速开发框架.力软信息化系统快速开发框架的使用,大大地缩短了开发周期,提高了软件质量,同时也 ...