如果我从未使用过HashSet,我还应该实现GetHashCode吗?

Dim*_* C. 5 c#

我永远不需要将对象存储在哈希表中.原因有两个:

  • 提出一个好的哈希函数很难并且容易出错.
  • AVL树几乎总是足够快,它只需要一个严格的顺序谓词,这更容易实现.

另一方面,Equals()操作是一种非常常用的功能.

因此我想知道在实现Equals函数(我经常需要)时是否有必要实现GetHashCode(我从不需要)?

And*_*rey 13

我的建议 - 如果您不想使用它,请覆盖它,throw new NotImplementedException();以便您将看到您需要它的位置.

  • @Dimitri:因为默认实现是针对引用标识,这在很多情况下就足够了. (2认同)

Mic*_*rdt 5

如果您认为实现严格的顺序谓词比散列函数更容易实现,我认为您错了 - 它需要处理大量边缘情况(空值,类层次结构).哈希函数并不那么难,真的.