有什么用GetHashCode()
?我可以使用跟踪对象身份GetHashCode()
吗?如果是这样,你能举个例子吗?
问问题
1379 次
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 回答