如何在对象上实现 GetHashCode()? [复制]
Posted
技术标签:
【中文标题】如何在对象上实现 GetHashCode()? [复制]【英文标题】:How do you implement GetHashCode() on objects? [duplicate] 【发布时间】: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。我投票关闭。 【参考方案1】:我快速而肮脏地实现了一堆成员,将它们与管道连接起来,然后获取其hascode:
(Member1.ToString() + "|" + Member2.ToString()).GetHasCode();
就我而言,我知道我永远不会在成员中使用管道,所以我知道结果会非常好。
实际上,就我而言,我实现 ToString 是出于调试目的,所以我只是使用它:
this.ToString().GetHashCode();
Xors 是我经常看到的另一种方法。
【讨论】:
这种方法对性能有严重影响。考虑到使用 GetHashCode 的地方,这似乎有效,但不明智。以上是关于如何在对象上实现 GetHashCode()? [复制]的主要内容,如果未能解决你的问题,请参考以下文章