列挙体をメンバ名の順(値に割り当てられている名前の順)に並べるには、次のように並べ替え順序を定義する必要があります。 ただ、次の例にあるように、列挙体ではメンバ名で定義されていない値も設定できるため、そういった値をどう取り扱うかについての考慮も必要となってきます。
列挙体の値をメンバ名の順にソートする
Imports System
Enum Number
MinusTwo = -2
MinusOne = -1
Zero = 0
One = 1
Two = 2
End Enum
Class Sample
' 列挙体の値を比較するメソッド
Shared Function CompareNumber(ByVal x As Number, ByVal y As Number) As Integer
' 列挙体の値を文字列(メンバ名)に変換
Dim xx As String = x.ToString("G")
Dim yy As String = y.ToString("G")
' 文字列として比較した結果を返す
Return String.Compare(xx, yy)
End Function
Shared Sub Main()
Dim arr As Number() = New Number() { _
Number.Zero, Number.One, Number.MinusOne, Number.Two, Number.MinusTwo, _
CType(3, Number) _
}
Array.Sort(arr, AddressOf CompareNumber)
For Each val As Number In arr
Console.WriteLine("{0,-8:G} ({0:D})", val)
Next
End Sub
End Class
実行結果
3 (3) MinusOne (-1) MinusTwo (-2) One (1) Two (2) Zero (0)