在C#中创建GetHashCode方法

在C#中创建GetHashCode方法,第1张

概述为C#中的类创建自己的GetHashCode方法的最佳方式是什么?假设我有一个简单的类(覆盖Equals方法),如下所示: class Test { public string[] names; public double[] values; public override bool Equals(object obj) { 为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>但是它会稍微慢些,因为如果参数具有不同的大小,它将不能提早退出.

总结

以上是内存溢出为你收集整理的在C#中创建GetHashCode方法全部内容,希望文章能够帮你解决在C#中创建GetHashCode方法所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1261113.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存