我过多地删除了相等方法和相等操作符,Resharper发出警告说我也应该重写GetHashCode。所以我就这么做了。我刚做了这个:
public override int GetHashCode()
{
return base.GetHashCode();
}但现在它又给了我一个警告: GetHashCode打电话给base.GetHashCode。所以,我要变坏了吗?为什么Resharper会发出这样的警告?我应该创建我自己的GetHashCode实现吗?事实上,我在想为什么我会费心去推翻它。
发布于 2015-06-08 00:03:47
两个相同的对象应该具有相同的哈希代码。否则,哈希代码就毫无意义,毫无价值。这就是为什么Resharper警告你。(相反的关系不是真,因为不同的对象可能有不同的哈希代码。)
基本实现根据对象的句柄返回一个值,并且很可能为相等(通过Equals定义)对象返回一个不同的值。如果您不使用它,这不是问题,但是Dictionary和HashSet使用它。如果您不正确地实现GetHashCode,它们将严重崩溃。
发布于 2015-06-08 00:04:35
如果要将项用作Dictionary、HashSet等中的键,则必须重写该项,因为它用于将项分组到桶中。否则,你可以避免这样做。
https://stackoverflow.com/questions/30699692
复制相似问题