案例不敏感词典与元组键

Eri*_*ric 12 c# dictionary string-comparison

我有一个字典,其中键是元组,其中第一项是日期,第二项是字符串.我希望字典不区分大小写.

我知道如果键只是一个字符串,我可以在声明字典时将StringComparer.OrdinalIgnoreCase作为参数传递,但是当键是元组时,这似乎不起作用.

有没有办法指定要在元组的第二项上使用的StringComparer?

谢谢

Jon*_*Jon 19

使用这种超负荷的的Dictionary构造函数,它允许你指定的键自定义比较.你可以通过创建一个实现的类来伴随它

IEqualityComparer<Tuple<string, DateTime>>
Run Code Online (Sandbox Code Playgroud)

这看起来像这样:

class CustomEqualityComparer : IEqualityComparer<Tuple<string, DateTime>>
{

    public bool Equals(Tuple<string, DateTime> lhs, Tuple<string, DateTime> rhs)
    {
        return
          StringComparer.CurrentCultureIgnoreCase.Equals(lhs.Item1, rhs.Item1)
       && lhs.Item2 == rhs.Item2;
    }


    public int GetHashCode(Tuple<string, DateTime> tuple)
    {
        return StringComparer.CurrentCultureIgnoreCase.GetHashCode(tuple.Item1)
             ^ tuple.Item2.GetHashCode();
    }
}
Run Code Online (Sandbox Code Playgroud)

这里没有参数检查,所以请不要将其视为生产代码.此外,需要注意使得EqualsGetHashCode实现满足最重要的条件,即如果两个元组比较相等,它们必须具有相同的哈希码.在处理自定义文本比较时,如果不是特别小心,很容易引入错误:例如,使用ToLowerInvariant而不是ToLower上面的错误(虽然可能在一段时间内没有浮出水面).