导出 (0) 打印
全部展开
信息
您所需的主题如下所示。但此主题未包含在此库中。

IComparable.CompareTo 方法

2013/12/13

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

Namespace:  System
程序集:  mscorlib(位于 mscorlib.dll 中)

声明
Function CompareTo ( _
	obj As Object _
) As Integer

参数

obj
类型: System.Object
与此实例进行比较的对象。

返回值

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

含义

小于零

此实例按排序顺序在 obj 前面。

此实例与 obj 在排序顺序中出现的位置相同。

大于零

此实例按排序顺序在 obj 后面。

异常条件
ArgumentException

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

CompareTo 方法由具有可排序值的类型实现。它由非泛型集合对象(如 Sort)的方法自动调用来对数组中的每个成员进行排序。如果自定义类或结构未实现 IComparable,则其成员将无法排序,并且排序操作会引发 InvalidOperationException

此方法只是一个定义,必须由特定的类或值类型实现才能生效。返回值部分(“之前”、“在相同的位置会出现”,和“追随”) 中指定的比较的含义取决于具体的实现。

根据定义,任何对象与 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) 必须返回与 xy 符号相同的值。

对调用者的说明

使用 CompareTo 方法可确定类的实例的排序。

下面的代码示例说明如何使用 CompareTo 将实现 IComparableTemperature 对象与其他对象进行比较。Temperature 对象只需对 CompareTo 方法的调用进行简单包装即可实现 Int32.CompareTo


Imports System.Collections

Public Class Temperature
   Implements IComparable
   ' The temperature value
   Protected temperatureF As Double

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

      If obj Is Nothing Then Return 1

      Dim otherTemperature As Temperature = TryCast(obj, Temperature)
      If otherTemperature IsNot Nothing Then
         Return Me.temperatureF.CompareTo(otherTemperature.temperatureF)
      Else
         Throw New ArgumentException("Object is not a Temperature")
      End If
   End Function

   Public Property Fahrenheit() As Double
      Get
         Return temperatureF
      End Get
      Set(ByVal Value As Double)
         Me.temperatureF = Value
      End Set
   End Property

   Public Property Celsius() As Double
      Get
         Return (temperatureF - 32) * (5 / 9)
      End Get
      Set(ByVal Value As Double)
         Me.temperatureF = (Value * 9 / 5) + 32
      End Set
   End Property
End Class

Public Module Example
   Public Sub Demo(ByVal outputBlock As System.Windows.Controls.TextBlock)
      Dim temperatures(9) As Temperature
      ' Initialize random number generator.
      Dim rnd As New Random()

      ' Generate 10 temperatures between 0 and 100 randomly.
      For ctr As Integer = 1 To 10
         Dim degrees As Integer = rnd.Next(0, 100)
         Dim temp As New Temperature
         temp.Fahrenheit = degrees
         temperatures(ctr - 1) = temp
      Next

      ' Sort Array.
      Array.Sort(temperatures)

      For Each temp As Temperature In temperatures
         outputBlock.Text &= temp.Fahrenheit & vbCrLf
      Next
   End Sub
End Module
' The example displays the following output (individual
' values may vary because they are randomly generated):
'       2
'       7
'       16
'       17
'       31
'       37
'       58
'       66
'       72
'       95


Windows Phone OS

受以下版本支持: 8.0, 7.1, 7.0

Windows Phone

显示:
© 2014 Microsoft