繁体   English   中英

GetHashCode问题

[英]GetHashCode issue

有谁可以帮助解释以下内容。 我遇到了一个Dictionary的问题,其中ContainsKey计算结果为false,而对象的EqualsGetHashCode都成功。 下面是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.

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