Сравните два объекта и найдите различия

Каков наилучший способ сравнить два объекта и найти различия?

Customer a = new Customer();
Customer b = new Customer();

Ответ 1

Одно гибкое решение: вы можете использовать отражение, чтобы перечислять все свойства и определять, какие и не равны, а затем возвращать некоторый список свойств и оба разных значения.

Вот пример некоторого кода, который является хорошим началом для того, что вы просите. Он теперь только смотрит на значения поля, но вы можете добавить любое количество других компонентов для проверки на отражение. Он реализован с использованием метода расширения, чтобы все его объекты могли его использовать.

ИСПОЛЬЗОВАТЬ

    SomeCustomClass a = new SomeCustomClass();
    SomeCustomClass b = new SomeCustomClass();
    a.x = 100;
    List<Variance> rt = a.DetailedCompare(b);

Мой класс сравнения для сравнения с

    class SomeCustomClass
    {
        public int x = 12;
        public int y = 13;
    }

И МЯСО И КАРТОФЕЛЬ

static class extentions
{
    public static List<Variance> DetailedCompare<T>(this T val1, T val2)
    {
        List<Variance> variances = new List<Variance>();
        FieldInfo[] fi = val1.GetType().GetFields();
        foreach (FieldInfo f in fi)
        {
            Variance v = new Variance();
            v.Prop = f.Name;
            v.valA = f.GetValue(val1);
            v.valB = f.GetValue(val2);
            if (!v.valA.Equals(v.valB))
                variances.Add(v);

        }
        return variances;
    }


}
class Variance
{
    public string Prop { get; set; }
    public object valA { get; set; }
    public object valB { get; set; }
}

Ответ 2

Equals и IEquatable<T> может использоваться, чтобы знать, являются ли два объекта равными, но они не позволят вам знать различия между объектами. Вы можете использовать отражение, сравнивая значения каждого свойства.

Еще один подход может заключаться в сериализации этих экземпляров в некотором текстовом формате и сравнении различий внутри результирующих строк (XML, JSON,...).