关于c#:如何在对象上实现GetHashCode()?

How do you implement GetHashCode() on objects?

本问题已经有最佳答案,请猛点这里访问。

重复:重写System.Object.GetHashCode的最佳算法是什么?

如果您已经使用各种数据成员编写了一个对象,那么如何智能地实现getHashCode()?

一个开发人员告诉我他只是XORS(^ operator)相关数据字段的散列,但我不相信这是一个"最佳实践"实现。

如果我有办法的话,会有函数object.combinehash(object[])和/或object.combinehash(int[])来帮助智能地构建复杂对象的散列。

您将如何编写这些函数?


我用管道连接了一组成员,然后得到了这些成员的hascode,从而快速而肮脏地实现了这些成员:

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

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

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

1
this.ToString().GetHashCode();

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