System.IComparable.CompareTo 方法
方法描述
将当前实例与同一类型的另一个对象进行比较,并返回一个整数,该整数指示当前实例在排序顺序中的位置是位于另一个对象之前、之后还是与其位置相同。
语法定义(C# System.IComparable.CompareTo 方法 的用法)
int CompareTo( Object obj )
参数/返回值
参数值/返回值 | 参数类型/返回类型 | 参数描述/返回描述 |
---|---|---|
obj | System-Object | 与此实例进行比较的对象。 |
返回值 | System.Int32 | 一个值,指示要比较的对象的相对顺序。 的含义如下: 值 含义 小于零 此实例按排序顺序在 obj 前面。 零 此实例与 obj 在排序顺序中出现的位置相同。 大于零 此实例按排序顺序在 obj 后面。 |
提示和注释
CompareTo 方法由具有可排序值的类型实现。 它由非泛型集合对象(如 Array.Sort)的方法自动调用来对数组中的每个成员进行排序。 如果自定义类或结构未实现 IComparable,则其成员将无法排序,并且排序操作会引发 InvalidOperationException。
此方法只是一个定义,必须由特定的类或值类型实现才能生效。 返回值部分(“之前”、“在相同的位置会出现”,和“追随”) 中指定的比较的含义取决于具体的实现。
根据定义,任何对象与 null (或之后)相比较都要大,两个空引用的比较结果为彼此相等。
参数 obj 必须与实现此接口的类或值类型具有相同的类型;否则将引发 ArgumentException。
对实现者的说明
对于对象 A、B 和 C,以下条件必须为真:
A.CompareTo(A) 必须返回零。
如果 A.CompareTo(B) 返回零,则 B.CompareTo(A) 必须返回零。
如果 A.CompareTo(B) 返回零,且 B.CompareTo(C) 返回零,则 A.CompareTo(C) 必须返回零。
如果 A.CompareTo(B) 返回一个非零值,则 B.CompareTo(A) 必须返回符号相反的值。
如果 A.CompareTo(B) 返回一个不等于零的值 x,并且 B.CompareTo(C) 返回一个与 x 符号相同的 y 值,则 A.CompareTo(C) 必须返回与 x 和 y 符号相同的值。
对调用者的说明
使用 CompareTo 方法可确定类的实例的排序。
System.IComparable.CompareTo 方法例子
Temperature 对象只需对 CompareTo 方法的调用进行简单包装即可实现 Int32.CompareTo。
using System; using System.Collections; public class Temperature : IComparable { // The temperature value protected double temperatureF; public int CompareTo(object obj) { Temperature otherTemperature = obj as Temperature; if (otherTemperature != null) return this.temperatureF.CompareTo(otherTemperature.temperatureF); else throw new ArgumentException("Object is not a Temperature"); } public double Fahrenheit { get { return this.temperatureF; } set { this.temperatureF = value; } } public double Celsius { get { return (this.temperatureF - 32) * (5.0/9); } set { this.temperatureF = (value * 9.0/5) + 32; } } } public class CompareTemperatures { public static void Main() { ArrayList temperatures = new ArrayList(); // Initialize random number generator. Random rnd = new Random(); // Generate 10 temperatures between 0 and 100 randomly. for (int ctr = 1; ctr <= 10; ctr++) { int degrees = rnd.Next(0, 100); Temperature temp = new Temperature(); temp.Fahrenheit = degrees; temperatures.Add(temp); } // Sort ArrayList. temperatures.Sort(); foreach (Temperature temp in temperatures) Console.WriteLine(temp.Fahrenheit); } } // The example displays the following output to the console (individual // values may vary because they are randomly generated): // 2 // 7 // 16 // 17 // 31 // 37 // 58 // 66 // 72 // 95
异常
异常 | 异常描述 |
---|---|
ArgumentException | obj 不具有与此实例相同的类型。 |
版本信息
.NET Framework 受以下版本支持:4、3.5、3.0、2.0、1.1、1.0 .NET Framework Client Profile 受以下版本支持:4、3.5 SP1
适用平台
Windows 7, Windows Vista SP1 或更高版本, Windows XP SP3, Windows XP SP2 x64 Edition, Windows Server 2008(不支持服务器核心), Windows Server 2008 R2(支持 SP1 或更高版本的服务器核心), Windows Server 2003 SP2 .NET Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表,请参见.NET Framework 系统要求。