我有一本字典,其中键是一个元组,其中第一项是日期,第二项是字符串。我希望字典不区分大小写。
我知道,如果键只是一个字符串,我可以在声明字典时将 StringComparer.OrdinalIgnoreCase 作为参数传递,但是当键是元组时,这似乎不起作用。
是否有某种方法可以指定要在元组的第二项上使用的 StringComparer ?
Thanks
Use 这种超载 http://msdn.microsoft.com/en-us/library/ms132072.aspx of the Dictionary
构造函数,它允许您为键指定自定义比较器。您将伴随着创建一个实现的类
IEqualityComparer<Tuple<string, DateTime>>
可能看起来像这样:
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();
}
}
这里没有参数检查,所以请不要将其视为生产代码。此外,还需要注意,以便Equals
and GetHashCode
实现满足最重要的条件:如果两个元组比较相等,则它们必须具有相同的哈希码。在处理自定义文本比较时,如果不格外小心,很容易引入错误:例如,使用ToLowerInvariant
代替ToLower
上面将是一个错误(尽管可能一段时间内不会出现)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)