2つ目は、SortメソッドとComparison<T>デリゲートを組み合わせる方法です。 Sortメソッドに特に引数を指定しない場合、Sortメソッドはデフォルト(つまり昇順)の並び替え順序でソートします。 Sortメソッドの引数に並び替え順序を定義したメソッドを表すComparison<T>デリゲートを指定すると、その順序に従ってソートするようになります。

したがって、降順に並び替えるよう動作を定義するメソッドを用意してそれをSortメソッドに渡すことにより、降順にソートする事ができます。 なお、この方法はComparison<T>デリゲートを引数にとることが出来るArray.SortメソッドList.Sortメソッドで使うことが出来ます。 (ArrayList.SortメソッドではIComparerを指定する必要があります)

SortメソッドとComparison<T>デリゲートを使ってListを降順にソートする
Imports System
Imports System.Collections.Generic

Class Sample
  ' 二つのIntegerを比較するためのメソッド
  Shared Function CompareDescending(ByVal x As Integer, ByVal y As Integer) As Integer
    Return y.CompareTo(x)
    ' 単に次のようにしても同じ結果となる
    ' Return y - x
    ' Return -x.CompareTo(y)

    ' 参考までに、昇順の場合は次のように記述する
    ' Return x.CompareTo(y)
    ' Return x - y
  End Function

  Shared Sub Main()
    ' ソート対象のList(Of Integer)
    Dim list As New List(Of Integer)(New Integer() {5, 2, 3, 1, 4})

    ' ソート
    list.Sort(AddressOf CompareDescending)

    ' 降順にソートして表示
    For Each val As Integer In list
      Console.Write("{0}, ", val)
    Next
    Console.WriteLine()
  End Sub
End Class
実行結果
5, 4, 3, 2, 1, 

SortメソッドとComparison<T>デリゲートについては、複合型のソート・複数キーでのソートでも改めて解説します。

Sortメソッドと型ごとのデフォルトのソート順については基本型とデフォルトのソート順で解説しています。