哪些方法在内部调用GetHashCode?

时间:2013-08-21 10:51:40

标签: c# clr gethashcode

我知道在覆盖GetHashCode方法时覆盖Equals的重要性。我假设Equals在内部调用GetHashCode

使用GetHashCode内部可能有哪些其他方法?

2 个答案:

答案 0 :(得分:4)

  

我假设Equals在内部调用GetHashCode。

实际上这很不寻常。 GetHashCode主要由字典和其他基于哈希集的实现使用;所以:HashtableDictionary<,>HashSet<>以及其他一系列内容。基本上,GetHashCode有两个目的:

  • 获取一个松散表示该值的数字,例如,可以用于通过模数或任何其他数字分类在一系列存储桶上分配一组键
  • 证明不平等(但从未证明平等)

另请参阅:Why is it important to override GetHashCode when Equals method is overridden?

答案 1 :(得分:3)

Equals内部没有致电GetHashCode 许多类使用GetHashCode作为提高性能的方法:如果两个实例的哈希码不同,则实例不等于按定义,因此对Equals的调用可以被跳过。
只有当哈希码相同时才需要调用Equals,因为多个实例可以具有相同的哈希码,即使它们不同。

类似这样工作的类的具体示例: