【发布时间】:2016-02-11 03:48:41
【问题描述】:
我阅读的越多,我对博客、MSDN 以及其他 stackoverflow 问题和响应的困惑就越多。
本文:https://msdn.microsoft.com/en-us/library/ms173147%28VS.90%29.aspx 状态: "Equals 的新实现不应该抛出异常。建议任何覆盖 Equals 的类也覆盖 Object.GetHashCode"
但是这篇文章:http://www.aaronstannard.com/overriding-equality-in-dotnet/ 状态: “一个重要的警告 - 只有在你的对象不可变时才应该覆盖 GetHashCode。”
1) 那么,我会直接听微软的第一篇文章吗?还是我听第二篇文章似乎比微软有更强的哈希码返回。
2) 如果使用 Microsoft 示例,该示例使用异或返回实例成员 int 值。这是我对所有值类型都做的事情吗?那么 int32 结构上为什么有一个返回哈希码的选项呢?我什么时候返回哈希码和值?
3) 我什么时候使用更复杂的哈希码返回(来自第二篇文章)与更简单的第一篇(微软)文章
4) 如果对象是不可变的且不能更改,并且相同类型的两个不可变对象的值相等,那么 HashCode 为何重要?
【问题讨论】:
-
一篇帖子有很多问题(如果不是全部的话,大多数问题已经在 SO 上讨论死了)。一些你可以考虑的问题 - stackoverflow.com/questions/873654/…, stackoverflow.com/questions/462451/…
-
我已经回答了你帖子的第一部分。每个帖子只问一个问题。
-
您的问题 4 相当于“为什么哈希码永远很重要?”。为此,您需要了解哈希表的工作原理(维基百科)。