我可以使用GetHashCode跟踪对象标识吗?

use*_*677 4 c# identity gethashcode

有什么用GetHashCode()?我可以使用GetHashCode()?跟踪对象标识吗?如果是这样,你能提供一个例子吗?

Jon*_*eet 22

哈希码不是关于身份,而是关于平等.事实上,你可以说他们是关于不平等的:

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

散列码不是唯一的,它们也不保证相等(两个对象可能具有相同的散列但仍然不相等).

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

  • 默认的`GetHashCode`实现返回运行时使用的某种内部对象标识符.但是由于`GetHashCode`是虚拟的,你可以覆盖它以返回你想要的任何东西.当您需要覆盖它时,请检查以下两个问题:http://stackoverflow.com/questions/263400/what-is-the-best-algorithm-for-an-overridden-system-object-gethashcode和http:// stackoverflow .COM /问题/ 873654 /覆盖-的GetHashCode换可变对象-C (3认同)

Hen*_*man 5

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