C#.NET GetHashCode函数问题

gan*_*ran 10 .net c# class gethashcode

嗨我有一个有6个字符串属性的类.对于这些字段中的至少一个,唯一对象将具有不同的值

为了实现IEqualityComparer的GetHashCode函数,我连接所有6个属性并在结果字符串上调用GetHashCode.

我有以下疑惑:

  1. 是否有必要在唯一值上调用GetHashcode?
  2. 对六个属性的连接操作是否会使比较缓慢?
  3. 我应该使用其他方法吗?

Jon*_*Jon 3

GetHashCode不需要为“不相等”的对象返回不相等的值。它只需要为相等的对象返回相等的值(它还必须在对象的生命周期内返回相同的值)。

这意味着:

  1. 如果两个对象与 进行比较Equals,则它们GetHashCode必须返回相同的值。
  2. 如果 6 个字符串属性中的某些属性不是严格只读的,则它们不能参与实现GetHashCode

如果你不能同时满足这两点,你应该重新评估你的设计,因为任何其他的事情都会为错误敞开大门。

最后,您可能可以GetHashCode通过调用GetHashCode6 个字符串中的每一个,然后使用一些按位运算将所有 6 个结果集成到一个值中来加快速度。