情報
要求されたトピックは次のとおりです。しかし、このトピックはこのライブラリには含まれていません。

IComparable.CompareTo メソッド

2013/12/12

現在のインスタンスを同じ型の別のオブジェクトと比較して、並べ替え順序において、現在のインスタンスの位置が同じ型の別のオブジェクトの前、後ろ、または同じのいずれであるかを示す整数を返します。

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 よりも大きく (または後ろに位置し)、また 2 つの null 参照は互いに等しくなります。

obj パラメーターは、このインターフェイスを実装するクラスまたは値型と同じ型である必要があります。それ以外の場合は、ArgumentException がスローされます。

実装時の注意

オブジェクト A、B、C について、次の条件が満たされる必要があります。

A.CompareTo(A) は 0 を返す必要があります。

A.CompareTo(B) が 0 を返す場合は、B.CompareTo(A) も 0 を返す必要があります。

A.CompareTo(B) が 0 を返し、B.CompareTo(C) が 0 を返す場合は、A.CompareTo(C) も 0 を返す必要があります。

A.CompareTo(B) が 0 以外の値を返す場合、B.CompareTo(A) は反対の符号の値を返す必要があります。

A.CompareTo(B) が 0 でない値 x を返し、B.CompareTo(C)x と同じ符号の値 y を返す場合、A.CompareTo(C)x および y と同じ符号の値を返す必要があります。

呼び出し時の注意

CompareTo メソッドを使用して、クラスのインスタンスの順序を決定します。

CompareTo を使用して、IComparable を実装している Temperature オブジェクトを別のオブジェクトと比較する方法を次のコード例に示します。Temperature オブジェクトは、Int32.CompareTo メソッドへの呼び出しを単純にラップして 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

表示: