GetStringComparer拡張メソッドで取得したStringComparerをDictionaryのコンストラクタに渡すことにより、CompareOptionsを使用したキーの比較を行うことができます。
例として、CompareOptions.IgnoreKanaType/IgnoreWidthを使って、キーのひらがなとカタカナの違い/全角と半角の違いを無視するDictionary<string, string>を作成するには次のようにします。
CompareOptionsを使用してキーの全角半角の違い無視するDictionaryを作成する .NET Framework 4.7.1
using System;
using System.Collections.Generic;
using System.Globalization;
class Sample {
static void Main()
{
// 全角・半角の違いを無視するDictionaryを作成する
var dict = new Dictionary<string, string>(
// CultureInfo.InvariantCultureのCompareInfoをベースに、CompareOptions.IgnoreWidthを指定して
// 全角・半角の違いを無視するStringComparerを取得する
CultureInfo.InvariantCulture.CompareInfo.GetStringComparer(CompareOptions.IgnoreWidth)
);
dict["hoge"] = "ほげ";
dict["piyo"] = "ぴよ";
dict["42"] = "よんじゅうに";
// 全角半角の違いは無視されるため、キー"piyo", "42"の値が上書きされる
dict["piyo"] = "ピヨ";
dict["42"] = "よんじゅうに";
foreach (var p in dict) {
Console.WriteLine("{0} => {1}", p.Key, p.Value);
}
Console.WriteLine(dict.ContainsKey("piyo"));
}
}
実行結果
hoge => ほげ piyo => ピヨ 42 => よんじゅうに True
Dictionaryとキー比較のカスタマイズについてはジェネリックコレクション(2) Dictionary §.キー比較のカスタマイズ(大文字小文字の違いの無視)を参照してください。