【问题标题】:How do you implement GetHashCode() on objects? [duplicate]如何在对象上实现 GetHashCode()? [复制]
【发布时间】:2010-10-01 06:56:46
【问题描述】:

重复What is the best algorithm for an overridden System.Object.GetHashCode?


如果您编写了一个包含多种数据成员的对象,您如何智能地实现 GetHashCode()?

一位开发人员告诉我他只是对相关数据字段的哈希进行异或(^ 运算符),但我不相信这是一个“最佳实践”实现。

如果我想的话,会有函数 Object.CombineHashes(Object[]) 和/或 Object.CombineHashes(int[]) 来帮助智能地构建复杂对象的哈希值。

你会如何编写这些函数?

【问题讨论】:

  • 很好的发现,@Gortok。我投票关闭。

标签: c# .net


【解决方案1】:

我快速而肮脏地实现了一堆成员,将它们与管道连接起来,然后获取其hascode:

(Member1.ToString() + "|" + Member2.ToString()).GetHasCode();

就我而言,我知道我永远不会在成员中使用管道,所以我知道结果会非常好。

实际上,就我而言,我实现 ToString 是出于调试目的,所以我只是使用它:

this.ToString().GetHashCode();

Xors 是我经常看到的另一种方法。

【讨论】:

  • 这种方法对性能有严重影响。考虑到使用 GetHashCode 的地方,这似乎有效,但不明智。
猜你喜欢
  • 2023-03-24
  • 1970-01-01
  • 2011-02-22
  • 2014-01-17
  • 1970-01-01
  • 2012-05-21
  • 2016-11-28
  • 2016-07-22
相关资源
最近更新 更多