Vorrei un feedback su come possiamo scrivere una funzione generica che consenta di confrontare due elenchi. Gli elenchi contengono oggetti di classe e vorremmo iterare attraverso un elenco, cercando lo stesso elemento in un secondo elenco e riportare eventuali differenze.Confronta due elenchi per le differenze
Abbiamo già un metodo per confrontare le classi, quindi abbiamo bisogno di un feedback su come possiamo alimentare il metodo (mostrato sotto) da due elenchi.
Ad esempio, diciamo che abbiamo una semplice classe "Dipendente" che ha tre proprietà, Nome, ID, Dipartimento. Vogliamo segnalare le differenze tra Elenco e un altro Elenco.
Nota:
Entrambi gli elenchi contengono sempre lo stesso numero di elementi.
Come detto sopra, abbiamo un metodo generico che usiamo per confrontare due classi, come possiamo incorporare questo metodo per soddisfare gli elenchi, cioè da un altro metodo, scorrere l'elenco e alimentare le classi con il metodo generico. ... ma come troviamo la classe equivalente nel secondo Elenco per passare al metodo seguente;
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;
}
Qualche suggerimento o idea apprezzata?
Modifica: Targeting .NET 2.0 in modo che LINQ sia fuori questione.
lol ... no, un livello superiore, sistema di applicazioni critiche :-) sul serio, cercando di implementare questa funzionalità in un piccolo passatempo app ... è tutto di apprendimento. –
Gli elenchi sono di uguale lunghezza? – Noldorin
sì, le liste sono di uguale lunghezza –