什么是最好的方式来创建自己的GetHashCode方法一类C#?假设我有一个简单的类(其复盖等方法),如下:

class Test
{
   public string[] names;

   public double[] values;

   public override bool Equals(object obj)
   {
      return (obj is Test) && this.Equals((Test)obj);
   }

   public bool Equals(Test t)
   {
      return names.Equals(t.names) && values.Equals(t.values);
   }
}

我应该使用的默认代码GetHashCode方法?

public override int GetHashCode()
{
   return base.GetHashCode();
}

我应该基础的方法在内容上我的课?

public override int GetHashCode()
{
   return names.GetHashCode() + values.GetHashCode() ;
}

或者我应该做些别的事情?

其他提示

,以确保您保持.GetHashCode(的覆盖它是非常重要的)的步骤的有.Equals()。

基本上,你必须确保他们认为相同的字段,以便不违反第一的GetHashCode的三个规则(从的 MSDN object.GetHashCode()

  

如果两个对象的比较结果为相等,则   GetHashCode的方法为每个对象   必须返回相同的值。然而,   如果两个对象不作为比较   相等,则方法的GetHashCode为   两个Object不必返回   不同的值。

在换句话说,你必须确保每次.Equals考虑两个相等的情况下,他们也将有同样的.GetHashCode()。

正如有人提到人在这里,这个问题细节方面有着出色的实现。 如果你有兴趣,我写了一些博客文章查处的散列码去年年初。你可以找到我的随笔这里(第一博客条目我关于这个问题写)

有一个良好的讨论的问题 在这里,, 和最近的更新指 BaseObject抽象的类 提供SharpArchitecture.

如果你想要更多的东西 特设, 我已经找到代码,ReSharper产生于平等()和GetHashCode()被罚款。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top