c# - 你如何在对象上实现 GetHashCode()?

标签 c# .net

<分区>

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


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

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

如果我按照自己的方式行事,就会有函数 Object.CombineHashes(Object[]) 和/或 Object.CombineHashes(int[]) 来帮助智能地构建复杂对象的哈希值。

你会如何编写这些函数?

最佳答案

我通过将它们与管道连接起来然后获取它的 hascode,对一堆成员进行了快速而肮脏的实现:

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

在我的例子中,我知道我永远不会在成员中使用管道,所以我知道结果会很好。

实际上,在我的例子中,我实现了 ToString 用于调试目的,所以我只是使用它:

this.ToString().GetHashCode();

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

关于c# - 你如何在对象上实现 GetHashCode()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/441529/

相关文章:

c# - IList<T> 作为泛型返回

c# - 从普通 C# 类调用 SignalR Client 方法

c# - 映射到关系类型时 EF Core 3 添加迁移失败

c# - 在 silverlight 中单击子窗口外部即可关闭子窗口

c# - 异常后C#中局部变量的值?

.net - 如何开发 Windows 应用程序

c# 7.0 : switch on System. 类型

c# - 获取asp :panel elements

c# - 签名 XML 在 api 门上返回无效签名和错误的签名检查

.net - Windows 10 桌面应用程序上的自定义标题栏颜色