¿cuál es la mejor manera de comparar dos objetos y encontrar las diferencias?Comparar dos objetos y encontrar las diferencias
Customer a = new Customer();
Customer b = new Customer();
¿cuál es la mejor manera de comparar dos objetos y encontrar las diferencias?Comparar dos objetos y encontrar las diferencias
Customer a = new Customer();
Customer b = new Customer();
Una solución flexible: Se puede utilizar la reflexión para enumerar todas las propiedades y determinar cuáles son y no son iguales, entonces volver alguna lista de propiedades y ambos valores diferentes.
Aquí hay un ejemplo de código que es un buen comienzo para lo que está preguntando. Solo mira los valores de Field en este momento, pero podría agregar cualquier cantidad de otros componentes para verificar a través de la reflexión. Se implementa utilizando un método de extensión para que todos sus objetos puedan usarlo.
USAR
SomeCustomClass a = new SomeCustomClass();
SomeCustomClass b = new SomeCustomClass();
a.x = 100;
List<Variance> rt = a.DetailedCompare(b);
Mi clase de muestra para comparar contra
class SomeCustomClass
{
public int x = 12;
public int y = 13;
}
Y LA CARNE Y PATATAS
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; }
}
El método Equals
y la interfaz IEquatable<T>
podría utilizarse para conocer si dos objetos son iguales pero no te permitirán saber las diferencias entre los objetos. Puede usar la reflexión comparando los valores de cada propiedad.
Otro enfoque más podría consistir en serializar esas instancias en algún formato de texto y comparar las diferencias dentro de las cadenas resultantes (XML, JSON, ...).
Creo que no está buscando pruebas de igualdad, sino la colección de razones por las cuales los dos objetos no coinciden. – deepee1
Claro, pero eso realmente no tiene sentido ya que no tenemos idea de lo que está contenido en la clase de Cliente – Rob
@ deepee1, @Rob, estoy de acuerdo en que 'Igual' y' IEtableable
+1 para "CARNE Y PATATAS" – Kehlan
Usar if (! Es igual a (v.valA, v.valB)) en lugar de if (! V.valA.Equals (v.valB)) para prevenir NullException – Jerome2606
¿Por qué no? propiedades de auto? –