我有一本字典。
Dictionary<YMD, object> cache = new Dictionary<YMD, object>();
YMD 类是我的发明之一,它是一个仅包含年、月和日期的类。目的是数据将按相关日期建立索引。无论如何,我已经实现了 Equals() 和 CompareTo() 函数,以及 == 和 != 运算符。
尽管如此,Dictionary.ContainsKey() 函数将始终返回 false,即使键存在。
我立即认为我的比较函数一定被破坏了,但是在为所有这些函数编写单元测试之后,情况似乎并非如此。
字典课上有什么我不知道的吗?
带着字典,GetHashCode()
很关键。对于相等的事物(Equals() == true
) it must返回相同的数字(但允许发生冲突 - 即两个项目可以巧合地返回相同的数字,但不能被视为相等)。
另外 - 哈希码必须not当该项目在字典中时进行更改。散列readonly
值对此很有好处,但也可以:不要改变它!例如,如果您的 equals / hashcode 跨越实体Name
and Id
(比如说),然后不要更改对象的这些属性,否则您可能永远不会再看到该记录(即使您传入与键相同的实例)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)