我有一本字典.
Dictionary<YMD, object> cache = new Dictionary<YMD, object>();
Run Code Online (Sandbox Code Playgroud)
YMD课程是我的发明之一,它是一个只包含年,月和日期的课程.目的是将数据与日期相关联的索引.无论如何,我已经实现了Equals()和CompareTo()函数,以及==和!=运算符.
尽管如此,即使密钥存在,Dictionary.ContainsKey()函数也将始终返回false.
我立即认为我的比较函数必须被打破,但在为所有这些函数编写单元测试之后,它似乎并非如此.
有什么关于字典类的东西,我不知道吗?
Mar*_*ell 16
用字典,GetHashCode()很关键.对于相等的东西(Equals() == true),它必须返回相同的数字(但允许有碰撞 - 即两个项目可以通过巧合返回相同的数字但不被视为等于).
此外 - 当项目在字典中时,哈希码不得更改.散居readonly价值观对此有利,但另外:只是不要改变它!例如,如果你的equals/hashcode跨越一个实体Name和Id(比如说),那么就不要改变对象的那些属性,否则你可能永远不会再看到那个记录(即使你传入了与键相同的实例).