キーの大文字小文字比較を無視するジェネリクス辞書
IDictionary
幸いにも以下のようにそれ用のコンストラクタがGenerics Dictionaryにあったのだが、
public Dictionary (IEqualityComparercomparer)
ICompareにはCaseInsensitiveComparerが存在するが、同等のIEqualityComparer
public class CaseInsensitiveEqualityComparer: IEqualityComparer { public CaseInsensitiveComparer comparer; public CaseInsensitiveEqualityComparer() { this.comparer = CaseInsensitiveComparer.DefaultInvariant; } public CaseInsensitiveEqualityComparer(CultureInfo culture) { this.comparer = new CaseInsensitiveComparer(culture); } public new bool Equals(T x, T y) { return ( this.comparer.Compare(x, y) == 0) ? true:false; } public int GetHashCode(T obj) { return obj.ToString().ToLower().GetHashCode(); } }
これで当初の目的の辞書が作れる。
IDictionarycaseInsensitiveColumns = new Dictionary (new CaseInsensitiveEqualityComparer ());
追記:
akirameiさんからコメントで指摘頂いた。CaseInsensitiveEqualityComparerクラスと全く同じ働きをするために、既にStringComparer.InvariantCultureIgnoreCaseが用意されているそうだ。
IDictionarycaseInsensitiveColumns = new Dictionary (StringComparer.InvariantCultureIgnoreCase);
やりたいことはまったく同じだよ。 orz...
StringComparerの存在は知っていたのに自分で探せないのが恥ずかしい限り。
自分への見せしめのために、書いたクラスは暫く晒しておこうと思う。