【发布时间】:2010-12-10 10:52:21
【问题描述】:
我有这样的课:
public class Cycle
{
public List<int> Edges
{
get;
private set;
}
public override bool Equals(object obj)
{
Cycle cycle = (Cycle)obj;
var list1 = cycle.Edges;
var list2 = Edges;
var same = list1.Except(list2).Count() == 0 &&
list2.Except(list1).Count() == 0;
return same;
}
public override int GetHashCode()
{
// return Edges.GetHashCode();
}
}
如您所见,如果两个Edge 列表相同,那么我认为Cycles 相同。
现在的问题是如何实现GetHashCode()?
我尝试了Edges.GetHashCode(),但问题是两个List<Cycle>,具有相同的Cycle 对象但不同的顺序,将被视为不同,即使它们应该相同。
【问题讨论】:
-
Except是一个集合操作,它只给你不同的项目。如果不同的项目很重要,那么使用HashSet<T>可能是更好的选择。它有HashSet<T>.CreateSetComparer,可以免费完成所有这些工作。在任何情况下,如果您只想比较不同的项目是否相等,那么!Any比Count == 0性能更高。喜欢!list1.Except(list2).Any() && !list2.Except(list1).Any();。
标签: c# gethashcode