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是我经常看到的另一种方法。