在C#中创建GetHashCode方法

前端之家收集整理的这篇文章主要介绍了在C#中创建GetHashCode方法前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
为C#中的类创建自己的GetHashCode方法的最佳方式是什么?假设我有一个简单的类(覆盖Equals方法),如下所示:
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() ;
  }

还是应该做别的事情?

解决方法

System.Array不会覆盖GetHashCode或Equals,所以他们使用引用相等.所以你不应该叫他们.

要实现GetHashCode,请参阅this question.

要实现Equals,请使用SequenceEqual扩展方法.

编辑:在.NET 2.0中,您必须编写自己的SequenceEqual版本,如下所示:

public static bool SequenceEquals<T>(IList<T> first,IList<T> second) {
    if (first == second) return true;
    if (first == null || second == null) return false;

    if (first.Count != second.Count) return false;

    for (int i = 0; i < first.Count; i++)
        if (!first[i].Equals(second[i]))
            return false;

    return true;
}

您可以将其写入IEnumerable< T>而不是IList< T>但是它会稍微慢些,因为如果参数具有不同的大小,它将不能提早退出.

原文链接:https://www.f2er.com/csharp/93582.html

猜你在找的C#相关文章