ProKiLL
@ProKiLL
Системный администратор

Как найти разницу в двух экземплярах класса?

Добрый день!
Просьба подсказать как найти разницу в двух экземплярах класса
Класс:
public class InLetter
    {
        public int id { get; set; }
        public string in_reg_num { get; set; }
        public string in_reg_date { get; set; }
        public string reg_num { get; set; }
        public string reg_date { get; set; }
        public string correspondent { get; set; }
        public string Theme { get; set; }
        public List<Order> order { get; set; }
        public TypeDoc type_doc { get; set; }
    }


Допустим в нличии есть экземпляры класса: a и b
как найти разницу (в каких полях значения экземпляра b отличаются от значений экземпляра a)
  • Вопрос задан
  • 229 просмотров
Решения вопроса 1
DmitryITWorksMakarov
@DmitryITWorksMakarov
все зависит от задачи:
как именно сравнивать: рекурсивно, нерекурсивно
что выдавать в результате: имена свойств, PropertyInfo, PropertyDescriptor

если особых требований к быстродействию нет, то можно написать через рефлексию универсальный сравниватель, в том числе и рекурсивный.

В простейшем случае, нерекурсивный вариант, который сравнивает свойства с простыми типами по значению, а ссылочные по ссылке, и выдает имена различающихся свойств:

static IEnumerable<string> Compare<T>(T a, T b)
            where T : class
        {
            return typeof(T)
                    .GetProperties()
                    .Where(pi => !pi.GetValue(a, null).Equals(pi.GetValue(b, null)))
                    .Select(pi=>pi.Name);
        }
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
@kodwi
https://moikrug.ru/kodwi
Если нужно под конкретный класс - напиши собственный метод сравнения. Встроенных методов нет под твою задачу. Equals делает не то, что тебе нужно, судя по вопросу.
Ответ написан
@kapioprok
Здравствуйте, можно воспользоваться методом equals.
Ответ написан
@John_Nash
coder
сравнить все поля между собой
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы