■No81521 (ジョバンニ さん) に返信
別のクラスのリストにするとのことなのでRefListをList(of T)で定義するため以下のようなクラスを用意されると
よいかと思います。確認していないので完全な動作は保証しません。?.で記述された部分はあらかじめRefListの
Nothing判断をするよう組む必要があるかと思います。
Public Class Class1(Of T)
Implements IComparable(Of Class1(Of T))
Public Property ID As Integer
Public Property Name As String
Public Property RefList As List(Of T)
Public Function CompareTo(other As Class1(Of T)) As Integer Implements IComparable(Of Class1(Of T)).CompareTo
Dim ret = ID.CompareTo(other.ID)
If ret = 0 Then
ret = Name.CompareTo(other.Name)
End If
If ret = 0 Then
ret = RefList?.Count.CompareTo(other.RefList?.Count)
End If
If ret = 0 Then
Dim xenu = RefList.GetEnumerator
Dim yenu = other.RefList.GetEnumerator
Do While xenu.MoveNext AndAlso yenu.MoveNext
Dim xitm = xenu.Current
Dim yitm = yenu.Current
If TypeOf xitm Is IComparable Then
ret = DirectCast(xitm, IComparable).CompareTo(yitm)
Else
ret = xitm.ToString().CompareTo(yitm.ToString())
End If
If ret <> 0 Then Exit Do
Loop
End If
Return ret
End Function
End Class
クラス実装例:
Public Class Class2
Inherits Class1(Of String)
End Class
Public Class Class3
Inherits Class1(Of Integer)
End Class
Public Class Class4
Public Property a As String
Public Property b As String
Public Overrides Function ToString() As String
Return String.Format("{a}{b}")
End Function
End Class
Public Class Class5
Inherits Class1(Of Class4)
End Class