4.7以前の.NET FrameworkでCompareOptionsを使用してDictionaryを作成する場合は、CompareInfo.CompareメソッドをラップしてIEqualityComparer<string>を実装するクラスを独自に実装する必要があります。
CompareOptionsを使用してキーのひらがなとカタカナの違い無視するDictionaryを作成する(.NET Framework 4.7以前)
Imports System
Imports System.Collections.Generic
Imports System.Globalization
' ひらがな・カタカナの違いを無視するIEqualityComparer(Of String)
Class IgnoreKanaTypeComparer
Inherits EqualityComparer(Of String)
Public Overrides Function Equals(ByVal x As String, ByVal y As String) As Boolean
' CompareOptions.IgnoreKanaTypeを指定して2つの文字列が等しいか否かを判定する
Return String.Compare(x, y, CultureInfo.InvariantCulture, CompareOptions.IgnoreKanaType) = 0
End Function
Public Overrides Function GetHashCode(ByVal s As String) As Integer
' 実装は省略
Return 0
End Function
End Class
Class Sample
Shared Sub Main()
' 独自に実装したIEqualityComparer(Of String)を指定してDictionaryを作成する
Dim dict As New Dictionary(Of String, String)(New IgnoreKanaTypeComparer())
dict("ほげ") = "hoge"
dict("ぴよ") = "piyo"
dict("ふが") = "fuga"
dict("ピヨ") = "PIYO" ' ひらがな・カタカナの違いは無視されるため、キー"ぴよ"の値が上書きされる
For Each p As KeyValuePair(Of String, String) In dict
Console.WriteLine("{0} => {1}", p.Key, p.Value)
Next
Console.WriteLine(dict.ContainsKey("ピヨ"))
End Sub
End Class
実行結果
ほげ => hoge ぴよ => PIYO ふが => fuga True
この例では、EqualityComparer<string>クラスを継承することでIEqualityComparer<string>インターフェイスを実装しています。 また、GetHashCodeメソッドの実装は省略していますが、オブジェクトのハッシュ値が使用される場合は適切に実装する必要があります。
EqualityComparer<T>についての解説や実装例については等価性の定義と比較 §.EqualityComparer<T>を参照してください。