4

有什么用GetHashCode()?我可以使用跟踪对象身份GetHashCode()吗?如果是这样,你能举个例子吗?

4

4 回答 4

22

哈希码不是关于身份,而是关于平等。事实上,你可以说它们是关于非平等的

  • 如果两个对象具有相同的哈希码,它们可能相等
  • 如果两个对象具有不同的哈希码,则它们相等

哈希码不是唯一的,也不保证相等(两个对象可能具有相同的哈希但仍然不相等)。

至于它们的用途:它们几乎总是用于快速选择可能相等的对象然后测试实际相等性,通常在键/值映射(例如Dictionary<TKey, TValue>)或集合(例如HashSet<T>)中。

于 2009-09-03T20:45:06.133 回答
5

不,不保证 HashCode 是唯一的。但是您已经有了对对象的引用,它们非常适合跟踪身份,使用object.ReferenceEquals().

于 2009-09-03T20:40:53.600 回答
1

该值本身用于散列算法,例如散列表。

在其默认实现中,GetHasCode 不保证对象的唯一性,因此对于 .NET 对象不应这样使用,

在您自己的类中,通常最好重写 GetHashCode 以为您的对象创建唯一值。

于 2009-09-03T20:43:13.423 回答
1

它用于需要散列的算法\数据结构(例如散列表)。哈希码不能单独用于跟踪对象身份,因为具有相同哈希的两个对象不一定相等。但是,两个相等的对象应该具有相同的哈希码(这就是为什么如果您覆盖一个而不覆盖另一个,C# 会发出警告)。

于 2009-09-03T20:44:18.443 回答