如何在对象上实现 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()? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

Vue.js - 如何在数组对象上实现计算属性?

在 C# 中实现 Equals 但不是 GetHashCode [重复]

dotnet C# 实现 GetHashCode 的方法

如何在 Django 模板上实现“返回”链接?

如何在硬件设备上实现 matlab 代码以使其运行?

如何在不相关的类型上实现动态多态(运行时调用调度)?