Me gustaría recibir algunos comentarios sobre cómo podemos escribir mejor una función genérica que permita comparar dos listas. Las listas contienen objetos de clase y nos gustaría iterar a través de una lista, buscando el mismo elemento en una segunda lista e informar cualquier diferencia.Comparar dos listas para las diferencias
Ya tenemos un método para comparar clases, por lo que necesitamos comentarios sobre cómo podemos alimentar el método (que se muestra a continuación) de dos listas.
Por ejemplo, supongamos que tenemos una clase simple de "Empleado" que tiene tres propiedades, Nombre, ID, Departamento. Queremos informar las diferencias entre List y otra lista.
Nota:
Ambas listas contendrán siempre la misma cantidad de elementos.
Como se mencionó anteriormente, tenemos un método genérico que utilizamos para comparar dos clases, ¿cómo podemos incorporar este método para atender listas, es decir, desde otro método, recorrer la Lista y alimentar las clases al método genérico. ... pero ¿cómo encontramos la clase equivalente en la segunda lista para pasar al siguiente método;
public static string CompareTwoClass_ReturnDifferences<T1, T2>(T1 Orig, T2 Dest)
where T1 : class
where T2 : class
{
// Instantiate if necessary
if (Dest == null) throw new ArgumentNullException("Dest", "Destination class must first be instantiated.");
var Differences = CoreFormat.StringNoCharacters;
// Loop through each property in the destination
foreach (var DestProp in Dest.GetType().GetProperties())
{
// Find the matching property in the Orig class and compare
foreach (var OrigProp in Orig.GetType().GetProperties())
{
if (OrigProp.Name != DestProp.Name || OrigProp.PropertyType != DestProp.PropertyType) continue;
if (OrigProp.GetValue(Orig, null).ToString() != DestProp.GetValue(Dest, null).ToString())
Differences = Differences == CoreFormat.StringNoCharacters
? string.Format("{0}: {1} -> {2}", OrigProp.Name,
OrigProp.GetValue(Orig, null),
DestProp.GetValue(Dest, null))
: string.Format("{0} {1}{2}: {3} -> {4}", Differences,
Environment.NewLine,
OrigProp.Name,
OrigProp.GetValue(Orig, null),
DestProp.GetValue(Dest, null));
}
}
return Differences;
}
¿Alguna sugerencia o idea apreciada?
Editar: Targeting .NET 2.0 por lo que LINQ está fuera de la cuestión.
lol ... no, un nivel superior, sistema de aplicación crítica :-) serio, tratando de implementar esta funcionalidad en una pequeña aplicación manía ... todo el aprendizaje. –
¿Las listas son de igual longitud? – Noldorin
sí, las listas tienen la misma longitud –