C#: Vergleichen von zwei Objekten?

4 Antworten

Wenn Du die Klasse ändern kannst, dann implementiere IEquatable<T>.
Wenn Du sie nicht ändern kannst, dann implementiere IEqualityComparer<T> in einer eigenen Klasse.

Und ich gehe davon aus, dass Liste 1 das "Vorher" und Liste 2 das "Nachher" ist?

Wenn die Indizes gleich sind, dann bau eine for-Schleife, die über beide Listen läuft und jedes Item mit dem gleichen Index vergleicht, die passende Equals-Methode kommt von IEquatable<T>, oder von IEqualityComparer<T>.

Oder Du nutzt die Except-Methode und übergibst den IEqualityComparer<T>, mit list1.Except(list2) bekommst Du alle Items, die nicht in List2 verhanden sind, bzw. umgekehrt.

Beachte aber, dass dein ganzes Konzept stirbt, wenn die Objekt-Instanzen die Selben sind, denn dann sind alle Änderungen in Liste 2 natürlich auch in Liste 1 vorhanden.

Woher ich das weiß:Berufserfahrung – C#.NET Senior Softwareentwickler

Du könntest in der Klasse noch eine CheckSumme einführen,
die aus den Personenattributen gebildet wird. Dann müsstest du nur diese vergelichen anstatt jedes einzelne Attribut. Die ID des Eintrages würde die Hauptorientierung bilden, was in der 2ten Liste anzuschauen ist.

Tastaturbrix 
Fragesteller
 19.05.2020, 08:32

Die Klasse selber kann ich nicht Verändern.

0
IchMalWiederXY  19.05.2020, 08:34
@Tastaturbrix

Na dann. Ich gehe davon aus, dass auch die ID unique vorhanden bleiben muss.
Dann gilt es zunächst in der 2ten Liste die gleiche ID zu finden und im Anschluss die vorhandenen Attribute zu vergleichen.

1
IchMalWiederXY  19.05.2020, 08:40
@Tastaturbrix

Die Liste(n) stelle ich mir als Array aller Personen vor. Nun nimmst du das erste Element(Index 0) -die ID- der erste List und suchst diese ID in der 2ten Liste. Ggf als Index 8 gefunden. Nun vergleichst du die weiteren Attribute auf Gleichheit. Was bei einem Unterschied passieren muss, weiß ich nicht. Welche Liste Henne und welche Ei ist hat der Programmierer in der Hand. Ggf wird auch ein Merge beider Liste gewünscht, so dass neue Personen in Liste 2 nach Liste 1 übernommen werden.

1

* Irgentein ding z.b. int, string, objekt, liste

* == *

Beispiel zum anwenden:

a = input('Gebe einen string ein')
if reversed(a) == a :
  print(Der eingegebener string ist ein Palindrom.')
else :
  print(Der eingegebener string ist kein Palindrom.')

ich habe das mal so gelöst, indem ich den inhalt beider object mit einem binaryformatter in byte arrays gespeichert habe. diese beiden byte arrays kann man dann einfach mit bytearray1.SequenceEqual(bytearray2) vergleichen. dazu muss allerdings die entsprechende klasse als [serializable] gekennzeichnet werden.