我可以使用 GetHashCode 跟踪对象身份吗?
GetHashCode()
有什么用?我可以使用 GetHashCode()
跟踪对象身份吗?如果是这样,您能举个例子吗?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
GetHashCode()
有什么用?我可以使用 GetHashCode()
跟踪对象身份吗?如果是这样,您能举个例子吗?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(4)
哈希码与身份无关,而是与平等有关。事实上,您可以说它们是关于不相等的:
哈希码不是唯一的,也不能保证相等(两个对象可能具有相同的哈希值,但仍然不相等)。
至于它们的用途:它们几乎总是用于快速选择可能相等对象,然后测试实际相等性,通常在键/值映射中(例如
Dictionary
)或集合(例如HashSet
)。Hash codes aren't about identity, they're about equality. In fact, you could say they're about non-equality:
Hash codes are not unique, nor do they guarantee equality (two objects may have the same hash but still be unequal).
As for their uses: they're almost always used to quickly select possibly equal objects to then test for actual equality, usually in a key/value map (e.g.
Dictionary<TKey, TValue>
) or a set (e.g.HashSet<T>
).不,不保证 HashCode 是唯一的。但是您已经有了对对象的引用,它们非常适合使用
object.ReferenceEquals()
。No, a HashCode is not guaranteed to be unique. But you already have references to your objects, they are perfect for tracking identity, using
object.ReferenceEquals()
.该值本身用于哈希算法,例如哈希表。
在其默认实现中,GetHasCode 不保证对象的唯一性,因此对于 .NET 对象不应该这样使用。
在您自己的类中,通常最好重写 GetHashCode 来为您的对象创建唯一值。
The value itself is used in hashing algorithms, such as hashtables.
In its default implementation, GetHasCode does not guarantee the uniqueness of an object, thus for .NET objects should not be used as such,
In you own classes, it is generally good practice to override GetHashCode to create a unique value for your object.
它用于需要散列的算法\数据结构(例如散列表)。哈希码本身不能用于跟踪对象身份,因为具有相同哈希值的两个对象不一定相等。但是,两个相等的对象应该具有相同的哈希码(这就是为什么如果您覆盖一个对象而不覆盖另一个对象,C# 会发出警告)。
It's used for algorithms\data structures that require hashing (such as a hash table). A hash code cannot on its own be used to track object identity since two objects with the same hash are not necessarily equal. However, two equal objects should have the same hash code (which is why C# emits a warning if you override one without overriding the other).