System.IComparable 接口

方法描述

定义一种特定于类型的通用比较方法,值类型或类通过实现此方法对其实例进行排序。

语法定义(C# System.IComparable 接口 的用法)

[ComVisibleAttribute(true)]
public interface IComparable

构造函数

构造函数名称 构造函数描述

成员/方法

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

提示和注释

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

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

含义

小于零

当前实例优先于由 CompareTo 方法按排序顺序指定的对象。

该当前实例按排序顺序发生的位置与 CompareTo 方法指定的对象相同。

大于零

此当前实例遵循由 CompareTo 方法按排序顺序指定的对象。

所有数值类型(如 Int32 和 Double)均实现 IComparable,这一点与 String、Char 和 DateTime 是相同的。 此外,自定义类型还应提供自己的 IComparable 实现,以便允许对象实例进行排序。

System.IComparable 接口例子

下面的示例说明 IComparable 的实现,以及必需的 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

继承层次结构

命名空间

namespace: System

程序集: mscorlib(在 mscorlib.dll 中)

线程安全

版本信息

.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 系统要求。

相关资源

System 命名空间
MSDN