自分で作ったクラスを、簡単に並べ替える必要があったので、IComparableをインプリメントしてArrayListやArrayオブジェクトのSortメソッドを適用可能にする方法を調べる。
'比較されるデータを実現するクラス
Public Class EachObj
Implements IComparable
'プロパティ用内部変数
Private innerValue As Integer = 0
'数値を返すプロパティ
Public Property Value() As Integer
Get
Return innerValue
End Get
Set(ByVal NewValue As Integer)
innerValue = NewValue
End Set
End Property
'比較処理
Public Function CompareTo(ByVal obj As Object) As Integer Implements System.IComparable.CompareTo
Dim mineValue As Integer = Me.Value
Dim targetValue As Integer = CType(obj, EachObj).Value
If mineValue > targetValue Then
'相手のほうが小さい場合
Return 1
ElseIf mineValue < targetValue Then
'相手のほうが大きい場合
Return -1
Else
'同じ場合
Return 0
End If
End Function
End Class判りやすいように、CompareToをIFで書いているが、実際は数字を足し引きして結果を返すだけでよい。CompareToの戻り値は、正負とゼロしか判断していないので、プラス何百だろうと関係ないから。
で、このクラスを複数格納した親クラスを作って、そいつにIEnumerableインターフェイスを実装すれば、For Eachでくるくる回せて、中のソートも簡単なオブジェクトの完成。