Dictionary.ContainsKey()没有按预期工作

时间:2010-02-04 06:08:57

标签: c# .net

我有一本字典。

Dictionary<YMD, object> cache = new Dictionary<YMD, object>();

YMD课程是我的发明之一,它是一个只包含年,月和日期的课程。目的是将数据与日期相关联的索引。无论如何,我已经实现了Equals()和CompareTo()函数,以及==和!=运算符。

尽管如此,即使密钥存在,Dictionary.ContainsKey()函数也总是返回false。

我立刻认为我的比较函数必须被打破,但在为所有这些函数编写单元测试后,情况似乎并非如此。

我不知道词典课的某些内容吗?

2 个答案:

答案 0 :(得分:16)

使用字典,GetHashCode()至关重要。对于相等的事物(Equals() == true),必须返回相同的数字(但允许发生碰撞 - 即两个项目可以巧合返回相同的数字,但不能被视为等于)

此外 - 当项目在字典中时,哈希码必须更改。散列readonly值对此有好处,但另外:只是不要改变它!例如,如果你的equals / hashcode跨越实体NameId(比如说​​),那么就不要改变对象的那些属性,否则你可能再也看不到那条记录了(即使你通过了)与密钥相同的实例。

答案 1 :(得分:2)

您只需覆盖等于 GetHashcode 功能。
GetHashcode最常见的实现是XOR(^)所有实例的数据成员。

相关问题