SortedSetのコンストラクタでIComparer<T>を明示的に指定しない場合、最小値・最大値はデフォルトのソート順(大小関係)に従って求められます。 一方、コンストラクタでIComparer<T>を指定した場合は、そのIComparer<T>で定義される大小関係に従って最小値・最大値が求められることになります。

つまり、Minプロパティ・Maxプロパティは、IComparer<T>で定義されるソート順でSortedSetをソート(あるいは列挙)したときの、最初または最後の要素を取得するプロパティとなります。 このため、Minプロパティ・Maxプロパティで取得できる値が、常に値としての最小値・最大値になるとは限りません。

デフォルトとは逆順に並べ替えるIComparer<T>を指定してSortedSetを作成し、Minプロパティ・Maxプロパティが返す値の違いを見ると次のようになります。

Min・Maxプロパティを参照してSortedSetの並べ替え順での最初・最後の要素を取得する
Imports System
Imports System.Collections.Generic

Class ReverseIntegerComparer
  Implements IComparer(Of Integer)

  Public Function Compare(ByVal x As Integer, ByVal y As Integer) As Integer Implements IComparer(Of Integer).Compare
    ' Integerのデフォルトの大小関係とは逆の結果を返すようにする
    Return -1 * Comparer(Of Integer).Default.Compare(x, y)
  End Function
End Class

Class Sample
  Shared Sub Main()
    ' デフォルトの順序で並べ替えを行うSortedSet
    Dim s1 As New SortedSet(Of Integer)() From {0, 1, 2, 3, 4}

    Console.WriteLine(String.Join(", ", s1))

    ' 最小値と最大値を表示
    ' (デフォルトのソート順での最初と最後の要素を表示する)
    Console.WriteLine($"Mix: {s1.Min}")
    Console.WriteLine($"Max: {s1.Max}")
    Console.WriteLine()

    ' デフォルトとは逆の順序で並べ替えを行うSortedSet
    Dim s2 As New SortedSet(Of Integer)(New ReverseIntegerComparer()) From {0, 1, 2, 3, 4}

    Console.WriteLine(String.Join(", ", s2))

    ' 最小値と最大値を表示
    ' (デフォルトとは逆のソート順での最初と最後の要素を表示する)
    Console.WriteLine($"Mix: {s2.Min}")
    Console.WriteLine($"Max: {s2.Max}")
  End Sub
End Class
実行結果
0, 1, 2, 3, 4
Mix: 0
Max: 4

4, 3, 2, 1, 0
Mix: 4
Max: 0

MENTAにてテキストチャットによるサポートを行っています。 問題の解決法をお探しの方や.NET/C#を学習中の方はどうぞご利用ください。