Проблема в том, что ваш делегат-компаратор не следует правилам сравнения, перечисленным здесь .В частности, необходимо убедиться, что если вы говорите «х больше, чем у», вы также говорите «у меньше х».Здесь вы всегда говорите «х больше, чем у», но на самом деле вы никогда не говорите обратное.
Вот функция сравнения, которая будет правильно сортировать эти элементы
Function Compare(ByVal x as TheType, ByVal y as TheType) As Integer
If x.SubClass Is Nothing AndAlso y.SubClass Is Nothing Then
Return 0
Else If x.SubClass IsNot Nothing AndAlso y.SubClass IsNot Nothing Then
Return 0
Else If x.SubClass IsNot Nothing Tehn
Return -1
Else
Return 1
End If
End Function
Это также может быть выражено как лямбда-выражение, но так как они поддерживаются только в Visual Studio 2010, я решил написатьполная функция.