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

时间:2009-01-14 01:04:44

标签: c# .net

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


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

一位开发人员告诉我他只是XOR(^运营商)相关数据字段的哈希,但我不相信这是一个“最佳实践”实现。

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

你会如何写这些功能?

1 个答案:

答案 0 :(得分:1)

我通过将它们与管道连接起来然后获取那个的代码来快速而脏地实现一堆成员:

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

在我的情况下,我知道我不会在成员中使用管道,所以我知道结果会很好。

实际上,在我的情况下,我实现了ToString用于调试目的,所以我只是用它:

this.ToString().GetHashCode();

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