何时重写GetHashCode()?

tus*_*h1r 18 .net c#

我们什么时候应该覆盖' System '命名空间中' Object '类提供的GetHashCode()方法?

Jon*_*eet 14

当你覆盖时Equals,基本上.当你想提供一个不同的平等概念而不是简单的引用平等.

String就是一个很好的例子 - 如果它们代表相同的字符序列,则两个字符串相等(在简单的Equals调用下).哈希码反映了这一点,这样如果两个字符串相等,它们将具有相同的哈希码.(反过来不一定正确 - 两个不相等的字符串可以具有相同的哈希码,但它不太可能.)

(在其他方面,字符串很棘手,请注意 - 基于文化和外壳,有许多不同的平等概念,但String.Equals只是查看构成字符串的UTF-16代码点,并以最简单的可想象的方式对它们进行比较. )

  • 感谢John对这种易于理解的描述. (2认同)