Сравнение объектов по значению полей, если одним полем является List

Есть 2 объекта, одним полем которого может являться List.

public class pDataStruct<T, O>
{
    public String Name;
    public T Tag;
    public O Object;
}

Например полем Object такого объекта может являться List или просто bool. Как грамотно перегрузить Equals или сравнивать объекты по значению полей Tag и Object. Можно ли реализовать универсальную функцию сравнения, которая вызывала нужный Equals для сравнения полей по значению.


Ответы (1 шт):

Автор решения: Nicholas Goncharov
  1. Использовать ключевые слова, даже изменяя регистр какого-то символа - является дурным тоном. (в вашем случае поле public O Object;);
  2. Ситуации, когда у вас в одном случае поле может быть bool, а в другом List - является плохой реализацией вашей архитектуры, стоит подумать, как это сделать по другому для вашей задачи;
  3. Нужно четко понимать какими будут T и O - что из этого может быть только типом значения, а что ссылочным типом, и для всех полей, что являются ссылочным типом стоит использовать метод .Equals()

Как пример:

object fst = 5, snd = 5;
bool eq1 = (fst == snd); // false

bool eq2 = fst.Equals(snd); // true

Но для списков лучше использовать метод .SequenceEqual()

В вашем случае, как вариант, можно воспользоваться сравнением типа и проверить, является ли он bool if (Object is bool) аналогично и для List

→ Ссылка