2009-01-14 52 views
4

重复What is the best algorithm for an overridden System.Object.GetHashCode?你如何在对象上实现GetHashCode()?


如果你写的各种数据成员的一个对象,你如何聪明地实现GetHashCode()方法?

一位开发者告诉我他只是异或(^运算符)相关数据字段的散列,但我不相信这是一个“最佳实践”的实现。

如果我有我的方式,将有函数Object.CombineHashes(Object [])和/或Object.CombineHashes(int [])来帮助智能地构建复杂对象的散列。

你会如何编写这些功能?

+0

很好找,@Gortok。我投票结束。 – 2009-01-14 01:16:29

回答

1

我做了一个快速和肮脏的实施一堆成员通过与管道串联它们,然后得到的该hascode:

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

在我的情况,我知道,我永远不会有管道在成员中,所以我知道结果会很好。

其实,在我来说,我实现的ToString为了调试的目的,所以我只是使用了:

this.ToString().GetHashCode(); 

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

+4

此方法具有严重的性能影响。考虑GetHashCode在哪里使用,这看起来很有效,但是不明智。 – abelenky 2009-01-14 01:54:37