Сравните два объекта из одного класса с тоннами полей - PullRequest
8 голосов
/ 13 июля 2010

Я получил два объекта из одного класса, и мне нужно сравнить их поле за полем.Проблема в том, что у них около ста полей, и было бы чертовски сложно написать это от руки.

Знаете ли вы какой-нибудь способ сделать это более простым способом?Размышления в Java могут быть решением, но, тем не менее, мне кажется, что это взлом.И я все-таки ищу решение C #.

Ответы [ 4 ]

4 голосов
/ 13 июля 2010

Две идеи:

  1. Использовать рефлексию (она доступна в C #) и выполнять цикл по полям классов, сравнивая их.Если вы хотите иметь возможность исключать определенные поля, вы можете сделать это, создав класс атрибута и отметив поля, которые вы не хотите сравнивать с этим атрибутом.

  2. Используйте отражение для цикланад полями таким же образом и сгенерируйте требуемый код сравнения.Таким образом, у вас будет «настоящий» код, но вам не придется писать и поддерживать его самостоятельно.Атрибуты могут использоваться для точной настройки сгенерированного кода сравнения.

1 голос
/ 13 июля 2010

Лучше всего провести рефакторинг вашего кода, сто полей - это очень удобно.

Если вы не можете, потому что это устаревший код, выясните, какой атрибут делает их равными.

0 голосов
/ 13 июля 2010

Используйте поиск и замену регулярного выражения.Больно добавлять поля * (удаленные - это ошибка компиляции), но вы получаете преимущество от скомпилированного кода.

Правда, подумайте над разделением класса.Если есть 100 полей, могут ли они быть сгруппированы в классы компонентов?100 участников - это много беспорядка, которым нужно управлять.

0 голосов
/ 13 июля 2010

Если вам повезет, вы определите одно или два свойства, которые являются уникальными для экземпляра - особенно вероятно, если ваш класс представляет сущность базы данных - и вам нужно будет только сравнить эти уникальные свойства.

...