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方法所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)