101 votes

Compare deux objets et trouve les différences

Quelle est la meilleure façon de comparer deux objets et de trouver les différences?

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

223voto

deepee1 Points 4449

Une solution Flexible: Vous pouvez utiliser la réflexion pour énumérer toutes les propriétés et déterminer qui sont et ne sont pas égales, puis revenir à la liste des propriétés et à la fois des valeurs différentes.

Voici un exemple de code qui est un bon début pour ce que vous demandez. Il ne regarde que les valeurs du Champ en ce moment, mais vous pouvez ajouter n'importe quel nombre d'autres composants pour vérifier par la réflexion. Il est mis en œuvre à l'aide d'une méthode d'extension de sorte que tous vos objets de pouvoir l'utiliser.

POUR UTILISER

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

Mon exemple de catégorie à comparer

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

ET LA VIANDE ET LES POMMES DE TERRE

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
{
    string _prop;
    public string Prop
    {
        get { return _prop; }
        set { _prop = value; }
    }
    object _valA;
    public object valA
    {
        get { return _valA; }
        set { _valA = value; }
    }
    object _valB;
    public object valB
    {
        get { return _valB; }
        set { _valB = value; }
    }

}

12voto

Darin Dimitrov Points 528142

L' Equals méthode et l' IEquatable<T> interface pourrait être utilisé pour savoir si deux objets sont égaux, mais ils ne vous permettra pas de connaître les différences entre les objets. Vous pouvez utiliser la réflexion en comparant comparant les valeurs de propriété.

Pourtant, une autre approche pourrait consister en la sérialisation de ces instances dans certains format de texte et de comparer les différences à l'intérieur de la résultante des chaînes de caractères (XML, JSON, ...).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X