IComparable.CompareTo 方法

比较当前实例与同一类型的另一对象。

**命名空间:**System
**程序集:**mscorlib(在 mscorlib.dll 中)

语法

声明
Function CompareTo ( _
    obj As Object _
) As Integer
用法
Dim instance As IComparable
Dim obj As Object
Dim returnValue As Integer

returnValue = instance.CompareTo(obj)
int CompareTo (
    Object obj
)
int CompareTo (
    Object^ obj
)
int CompareTo (
    Object obj
)
function CompareTo (
    obj : Object
) : int

参数

  • obj
    与此实例进行比较的对象。

返回值

一个 32 位有符号整数,指示要比较的对象的相对顺序。返回值的含义如下:

含义

小于零

此实例小于 obj。

此实例等于 obj。

大于零

此实例大于 obj。

异常

异常类型 条件

ArgumentException

obj 不具有与此实例相同的类型。

备注

此方法只是一个定义,必须由特定的类或值类型实现才能生效。“小于”、“等于”和“大于”这几种比较的含义取决于具体的实现。

根据定义,任何对象与 空引用(在 Visual Basic 中为 Nothing) 相比较都要大,两个空引用的比较结果为彼此相等。

参数 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 方法可确定类的实例的排序。

示例

下面的代码示例说明如何使用 CompareTo 将实现 IComparable 的 Temperature 对象与另一个对象相比较。

Public Class Temperature
    Implements IComparable

    Public Overloads Function CompareTo(ByVal obj As Object) As Integer _
        Implements IComparable.CompareTo

        If TypeOf obj Is Temperature Then
            Dim temp As Temperature = CType(obj, Temperature)

            Return m_value.CompareTo(temp.m_value)
        End If

        Throw New ArgumentException("object is not a Temperature")
    End Function

    ' The value holder
    Protected m_value As Integer

    Public Property Value() As Integer
        Get
            Return m_value
        End Get
        Set(ByVal Value As Integer)
            m_value = Value
        End Set
    End Property

    Public Property Celsius() As Integer
        Get
            Return (m_value - 32) / 2
        End Get
        Set(ByVal Value As Integer)
            m_value = Value * 2 + 32
        End Set
    End Property
End Class
public class Temperature : IComparable {
    /// <summary>
    /// IComparable.CompareTo implementation.
    /// </summary>
    public int CompareTo(object obj) {
        if(obj is Temperature) {
            Temperature temp = (Temperature) obj;

            return m_value.CompareTo(temp.m_value);
        }
        
        throw new ArgumentException("object is not a Temperature");    
    }

    // The value holder
    protected int m_value;

    public int Value {
        get {
            return m_value;
        }
        set {
            m_value = value;
        }
    }

    public int Celsius {
        get {
            return (m_value-32)/2;
        }
        set {
            m_value = value*2+32;
        }
    }
}
public ref class Temperature: public IComparable {
   /// <summary>
   /// IComparable.CompareTo implementation.
   /// </summary>
protected:
   // The value holder
   Double m_value;

public:
   virtual Int32 CompareTo( Object^ obj ) {
      if ( obj->GetType() == Temperature::typeid ) {
         Temperature^ temp = dynamic_cast<Temperature^>(obj);

         return m_value.CompareTo( temp->m_value );
      }

      throw gcnew ArgumentException(  "object is not a Temperature" );
   }

   property Double Value {
      Double get() {
         return m_value;
      }
      void set( Double value ) {
         m_value = value;
      }
   }

   property Double Celsius  {
      Double get() {
         return (m_value - 32) / 1.8;
      }
      void set( Double value ) {
         m_value = value * 1.8 + 32;
      }
   }
};
public class Temperature implements IComparable
{
    /// <summary>
    /// IComparable.CompareTo implementation.
    /// </summary>
    public int CompareTo(Object obj)
    {
        if (obj instanceof Temperature) {
            Temperature temp = (Temperature)obj;
            return ((Int32)mValue).CompareTo(temp.mValue);
        }
        throw new ArgumentException("object is not a Temperature");
    } //CompareTo

    // The value holder
    protected int mValue;

    /** @property
     */
    public int get_Value()
    {
        return mValue;
    }//get_Value

    /** @property
     */
    public void set_Value(int value)
    {
        mValue = value;
    }//set_Value

    /** @property
     */
    public int get_Celsius()
    {
        return (mValue - 32) / 2;
    }//get_Celsius

    /** @property 
     */
    public void set_Celsius(int value)
    {
        mValue = value * 2 + 32;
    }//set_Celsius
} //Temperature

平台

Windows 98、Windows 2000 SP4、Windows CE、Windows Millennium Edition、Windows Mobile for Pocket PC、Windows Mobile for Smartphone、Windows Server 2003、Windows XP Media Center Edition、Windows XP Professional x64 Edition、Windows XP SP2、Windows XP Starter Edition

.NET Framework 并不是对每个平台的所有版本都提供支持。有关受支持版本的列表,请参见系统要求

版本信息

.NET Framework

受以下版本支持:2.0、1.1、1.0

.NET Compact Framework

受以下版本支持:2.0、1.0

请参见

参考

IComparable 接口
IComparable 成员
System 命名空间
Object