繁体   English   中英

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

[英]Dictionary.ContainsKey() not working as expected

我有一本字典。

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

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

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

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

有什么关于字典类的东西,我不知道吗?

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

此外 - 当项目在字典中时,哈希码不得更改。 readonly值进行哈希对此有好处,但另外:只是不要改变它! 例如,如果你的equals / hashcode跨越一个实体NameId (比如说),那么就不要改变对象的那些属性,否则你可能永远不会再看到那条记录(即使你传入与键相同的实例) 。

您只需要覆盖EqualsGetHashcode函数。
GetHashcode最常见的实现是XOR(^)所有实例的数据成员。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM