Хорошо, так что вы хотите глубоко неупорядоченный структурное сравнение. «Неупорядоченная» часть сложна, и на самом деле это сильный намек на то, что ваши классы не разработаны правильно: List<T>
по своей сути упорядочен, поэтому, возможно, вы предпочтете использовать там HashSet<T>
(если вы не ожидаете каких-либо дубликаты). Это позволило бы сделать сравнение и проще в реализации, и быстрее (хотя Вставки будет медленнее):
class Package
{
public HashSet<GroupList> groupList;
public override bool Equals(object o)
{
Package p = o as Package;
if (p == null) return false;
return groupList.SetEquals(p.groupList);
}
public override int GetHashCode()
{
return groupList.Aggregate(0, (hash, g) => hash^g.GetHashCode());
}
}
class GroupList
{
public HashSet<Feature> featureList;
public override bool Equals(object o)
{
GroupList g = o as GroupList;
if (g == null) return false;
return featureList.SetEquals(g.featureList);
}
public override int GetHashCode()
{
return featureList.Aggregate(0, (hash, f) => hash^f.GetHashCode());
}
}
class Feature
{
public int qty;
public override bool Equals(object o)
{
Feature f = o as Feature;
if (f == null) return false;
return qty == f.qty;
}
public override int GetHashCode()
{
return qty.GetHashCode();
}
}
Если вы хотите продолжать использовать List<T>
, вы должны будете использовать LINQ набор операций - внимание, однако, что те, значительно медленнее:
class Package
{
public List<GroupList> groupList;
public override bool Equals(object o)
{
Package p = o as Package;
if (p == null) return false;
return !groupList.Except(p.groupList).Any();
}
}
class GroupList
{
public List<Feature> featureList;
public override bool Equals(object o)
{
GroupList g = o as GroupList;
if (g == null) return false;
return !featureList.Except(f.featureList).Any();
}
}
Зависит от вашего определения, имеющие те же значения. –
И какой из объектов вы хотите сравнить. –
с классом образцов выше: сравнить два объекта пакета, чтобы они имели одинаковые списки групп, и каждый список групп имеет одинаковый набор списков функций, и каждая функция имеет такое же значение для qty. – jbagavathi