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