在C#中使用char键的不区分大小写字典

Len*_*ka 4 c# collections dictionary

如果我有一个Dictionary<char,...>是否可以使方法ContainsKey不区分大小写?

我知道,在Dictionary<string,...>使用StringComparer.InvariantCultureIgnoreCase时,但是当字典中的键是char-type时该怎么办?

Avn*_*tan 11

字典类有一个构造函数的任何IEqualityComparer.您需要做的是实现一个简单的不区分大小写IEqualityComparer<char>并将其传递给构造函数,并在评估密钥时使用它.

这是一个类似的问题,IComparer<char>无需区分大小写即可实现.IEqualityComparer将几乎完全相同:


Sel*_*enç 8

您可以实现自己的比较器:

public class CharComparer : IEqualityComparer<char>
{
     public bool Equals(char c1, char c2)
     {
          return char.ToLowerInvariant(c1) == char.ToLowerInvariant(c2);
     }
     public int GetHashCode(char c1)
     {
          return char.ToLowerInvariant(c1).GetHashCode();
     }

}
Run Code Online (Sandbox Code Playgroud)

并将其传递给构造函数:

var dict = new Dictioanry<char, object>(new CharComparer());
Run Code Online (Sandbox Code Playgroud)