[英]GetHashCode issue
有谁可以帮助解释以下内容。 我遇到了一个Dictionary的问题,其中ContainsKey
计算结果为false,而对象的Equals
和GetHashCode
都成功。 下面是Visual Studio中即时窗口的输出:
?LocationToRackingGroup.Keys.ToArray()[23].Equals(location)
true
?LocationToRackingGroup.Keys.ToArray()[23] == (location)
true
?this.LocationToRackingGroup.ContainsKey(location)
false
我错过了什么吗? 任何想法都非常感谢。
位置是否可变? 因为如果它是,它可能已经改变,因为你把它放入字典。
好吧,我想看看几件事:
1:正确实现了GetHashCode
:
?LocationToRackingGroup.Keys.ToArray()[23].GetHashCode() == location.GetHashCode()
2:如果这是通用字典,该类型是否也实现(显式) IEquatable<Location>
3:你是否在构造函数中为字典提供了自定义IEqualityComparer<Location>
?
为了排除最后,也许看看:
?LocationToRackingGroup.Comparer.Equals(blah23, location); // should be true
?LocationToRackingGroup.Comparer.GetHashCode(blah23); // should equal below
?LocationToRackingGroup.Comparer.GetHashCode(location);// should equal above
好的,这是一个很长的镜头。
在前两行中,您引用的是LocationToRackingGroup
,在最后this.LocationToRackingGroup
中是this.LocationToRackingGroup
,它们是相同的变量吗?
规则是对于相同数据的每个“实例”,哈希码必须相同。 如果它改变了,那么你的哈希函数就会被破坏。
IOW,最安全的哈希函数是:
int GetHashcode()
{
return 0;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.