Porównaj dwa obiekty i znaleźć różnice [duplicate]
Jaki jest najlepszy sposób na porównanie dwóch obiektów i znalezienie różnic?
Customer a = new Customer();
Customer b = new Customer();
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; }
}
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, ...).
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