我可以使用 GetHashCode 跟踪对象身份吗?

发布于 2024-08-03 18:12:00 字数 93 浏览 5 评论 0 原文

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

What is the use of GetHashCode()? Can I trace object identity using GetHashCode()? If so, could you provide an example?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

苏佲洛 2024-08-10 18:12:00

哈希码与身份无关,而是与平等有关。事实上,您可以说它们是关于不相等的:

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

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

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

Hash codes aren't about identity, they're about equality. In fact, you could say they're about non-equality:

  • If two objects have the same hash code, they may be equal
  • If two objects have different hash codes, they're not equal

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>).

刘备忘录 2024-08-10 18:12:00

不,不保证 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().

£烟消云散 2024-08-10 18:12:00

该值本身用于哈希算法,例如哈希表。

在其默认实现中,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.

旧瑾黎汐 2024-08-10 18:12:00

它用于需要散列的算法\数据结构(例如散列表)。哈希码本身不能用于跟踪对象身份,因为具有相同哈希值的两个对象不一定相等。但是,两个相等的对象应该具有相同的哈希码(这就是为什么如果您覆盖一个对象而不覆盖另一个对象,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).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文