Учитывая два экземпляра класса, является хорошей и надежной практикой сравнивать их, сериализуя их сначала, а затем сравнивая байтовые массивы (или, возможно, хэши массивов). Эти объекты могут иметь сложные иерархические свойства, но сериализация должна идти настолько глубоко, насколько это необходимо.
Для сравнения я имею в виду процесс обеспечения того, чтобы все свойства примитивных типов имели равные значения, свойства сложных типов имеют одинаковые свойства примитивных типов и т.д. Что же касается свойств коллекции, они должны быть равны друг другу: равные элементы, те же позиции:
{'a','b','c'} != {'a','c','b'}
{new Customer{Id=2, Name="abc"}, new Customer {Id=3, Name="def"}}
!=
{new Customer{Id=3, Name="def"}, new Customer {Id=2, Name="abc"}}
но
{new Customer{Id=2, Name="abc"}, new Customer {Id=3, Name="def"}}
==
{new Customer{Id=2, Name="abc"}, new Customer {Id=3, Name="def"}}
И по сериализации я имею в виду стандартный бинарный форматтер .NET.
Спасибо.