List<string>.SortやArray.Sortの場合も同様に、GetStringComparer拡張メソッドで取得したStringComparerをSortメソッドに渡すことにより、CompareOptionsを使用したソートを行うことができます。

例として、CompareOptions.IgnoreKanaType/IgnoreWidthを使って、ひらがなとカタカナの違い/全角と半角の違いを無視してソートするには次のようにします。

.NET Framework 4.7以前の場合は、Comparison<string>デリゲートに適合するメソッドあるいはラムダ式を記述することで、CompareOptionsを使用したソートを行うことができます。

CompareOptionsを使用して全角半角の違いを無視してListをソートする .NET Framework 4.7
Imports System
Imports System.Collections.Generic
Imports System.Globalization

Class Sample
  Shared Sub Main()
    Dim wordList As New List(Of String) From {"foo", "Foo", "foo", "FOO", "FOO", "Foo"}

    Console.WriteLine("before sort                    : {0}", String.Join(", ", wordList))

    ' CultureInfo.InvariantCultureをベースに、CompareOptions.IgnoreWidthを指定して
    ' 全角半角の違いを無視してソートする
    wordList.Sort(CultureInfo.InvariantCulture.CompareInfo.GetStringComparer(CompareOptions.IgnoreWidth))
    ' .NET Framework 4.7以前の場合は、String.Comparerメソッドを使用してソート順を定義する必要がある
    'wordList.Sort(Function(x As String, y As String)
    '  Return String.Compare(x, y, CultureInfo.InvariantCulture, CompareOptions.IgnoreWidth)
    'End Function)

    Console.WriteLine("CompareOptions.IgnoreWidth     : {0}", String.Join(", ", wordList))

    wordList.Sort(StringComparer.InvariantCulture)

    Console.WriteLine("StringComparer.InvariantCulture: {0}", String.Join(", ", wordList))

    wordList.Sort(StringComparer.Ordinal)

    Console.WriteLine("StringComparer.Ordinal         : {0}", String.Join(", ", wordList))
  End Sub
End Class
実行結果
before sort                    : foo, Foo, foo, FOO, FOO, Foo
CompareOptions.IgnoreWidth     : foo, foo, Foo, Foo, FOO, FOO
StringComparer.InvariantCulture: foo, foo, Foo, FOO, Foo, FOO
StringComparer.Ordinal         : FOO, Foo, foo, FOO, Foo, foo

Comparison<T>デリゲートについては大小関係の定義と比較 §.Comparison<T>を参照してください。

ソートについて詳しくは基本型のソートと昇順・降順でのソートを参照してください。

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