Porównaj dwa obiekty i znaleźć różnice [duplicate]

to pytanie ma już odpowiedzi tutaj : znajdowanie różnic właściwości pomiędzy dwoma obiektami C# (8 odpowiedzi) Zamknięty 5 lat temu .

Jaki jest najlepszy sposób na porównanie dwóch obiektów i znalezienie różnic?

Customer a = new Customer();
Customer b = new Customer();
 97
Author: Nick Kahn, 2011-02-09

2 answers

Jedno elastyczne rozwiązanie: możesz użyć refleksji, aby wyliczyć wszystkie właściwości i określić, które są, a które nie są równe, a następnie zwrócić listę właściwości i obie różne wartości.

Oto przykład kodu, który jest dobrym początkiem tego, o co prosisz. Teraz patrzy tylko na wartości pól, ale możesz dodać dowolną liczbę innych komponentów, aby sprawdzić je poprzez odbicie. Jest zaimplementowany przy użyciu metody rozszerzenia, dzięki czemu wszystkie obiekty mogą używać to.

DO UŻYCIA

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

Moja przykładowa Klasa do porównania z

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

I MIĘSO I ZIEMNIAKI

using System.Collections.Generic;
using System.Reflection;

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; }
}
 211
Author: deepee1,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-18 07:48:37

The Equals Metoda i IEquatable<T> interfejs może być używany, aby wiedzieć, czy dwa obiekty są równe, ale nie pozwolą Ci poznać różnic między obiektami. Można użyć refleksji porównując wartości każdej właściwości.

Jeszcze inne podejście może polegać na serializacji tych instancji do jakiegoś formatu tekstowego i porównać różnice wewnątrz wynikowych ciągów (XML, JSON, ...).

 11
Author: Darin Dimitrov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-03-24 09:08:37