GetHashCode()
有什么用?我可以使用GetHashCode()
跟踪对象标识吗?如果是这样,你能提供一个例子吗?
答案 0 :(得分:22)
哈希码不是关于身份,而是关于平等。事实上,你可以说他们是关于不平等的:
散列码不是唯一的,它们也不保证相等(两个对象可能具有相同的散列但仍然不相等)。
至于它们的用途:它们几乎总是用来快速选择可能相等的对象然后测试实际相等,通常在键/值映射中(例如Dictionary<TKey, TValue>
)或一组(例如HashSet<T>
)。
答案 1 :(得分:5)
不,不保证HashCode是唯一的。但是您已经有了对象的引用,它们非常适合使用object.ReferenceEquals()
来跟踪身份。
答案 2 :(得分:1)
值本身用于哈希算法,例如哈希表。
在其默认实现中,GetHasCode不保证对象的唯一性,因此不应该使用.NET对象,
在您自己的类中,通常优先覆盖GetHashCode以为对象创建唯一值。
答案 3 :(得分:1)
它用于需要散列的算法\数据结构(例如散列表)。哈希码本身不能用于跟踪对象标识,因为具有相同哈希的两个对象不一定相等。但是,两个相等的对象应该具有相同的哈希码(这就是为什么C#如果覆盖一个而不覆盖另一个则发出警告)。