IComparable 接口

定义

定义由值类型或类实现的特定于类型的通用比较方法,旨在对其实例进行排序。

C#
public interface IComparable
C#
[System.Runtime.InteropServices.ComVisible(true)]
public interface IComparable
派生
属性

示例

以下示例演示了实现 IComparable 和必备 CompareTo 方法。

C#
using System;
using System.Collections;

public class Temperature : IComparable
{
    // The temperature value
    protected double temperatureF;

    public int CompareTo(object obj) {
        if (obj == null) return 1;

        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

注解

此接口由可以排序或排序其值的类型实现。 它要求实现类型定义单个方法, CompareTo(Object)该方法指示当前实例在排序顺序中的位置是之前、之后还是与同一类型的第二个对象相同。 实例的 IComparable 实现由方法(如 Array.SortArrayList.Sort)自动调用。

方法的 CompareTo(Object) 实现必须返回三个值中的一个 Int32 值,如下表所示。

“值” 含义
小于零 当前实例位于排序顺序中由方法指定的 CompareTo 对象之前。
此当前实例在排序顺序中与方法指定的 CompareTo 对象位于同一位置。
大于零 此当前实例遵循排序顺序中由方法指定的 CompareTo 对象。

所有数值类型 ((如Int32Double) 实现IComparableStringChar)和DateTime。 自定义类型还应提供自己的实现 IComparable ,以便对对象实例进行排序或排序。

方法

CompareTo(Object)

将当前实例与同一类型的另一个对象进行比较,并返回一个整数,该整数指示当前实例在排序顺序中的位置是位于另一个对象之前、之后还是与其位置相同。

适用于

产品 版本
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0