Laden...

Zwei Objekte werden nicht als gleich erkannt, obwohl sie den gleichen Inhalt haben

Erstellt von TheMs vor 11 Jahren Letzter Beitrag vor 11 Jahren 1.115 Views
Thema geschlossen
T
TheMs Themenstarter:in
3 Beiträge seit 2012
vor 11 Jahren
Zwei Objekte werden nicht als gleich erkannt, obwohl sie den gleichen Inhalt haben

Hey Leute 😉 ,
ich hab ein Problem mit folgender if-clause:

if (vok != voklö )
{
     voksneu.Add(vok);
}

'vok' und 'voklö' sind als 'Vokabel' definiert.
'voksneu' ist 'List<Vokabel>' (aber unwichtig)

Bei mir ist jetzt das Problem, dass 'vok' selbst wenn der content der gleiche wie von 'voklö' ist, 'voksneu' hinzugefügt wird. Wiso ist das so und wie kann ich das umgehen?

Danke
TheMs

C
258 Beiträge seit 2011
vor 11 Jahren

nachdem vok eine Vokabel ist und ich annehme das du in deine Klasse Vokabel den != operator nicht überladen hast, ist klar das dieser Aufruf immer true liefert solange die beiden variablen nicht auf das !selbe! (das selbe nicht das gleiche ^^) element zeigen.

Woher soll der Compiler auch wissen wann die beiden Vokabeln gleich sind.
Daher verwendet er einfach einen Referenz vergleich.

Die Lösung dafür ist den != operator in deiner Klasse Vokabel zu überladen (den == solltest du in diesem zug auch überladen)

N
48 Beiträge seit 2010
vor 11 Jahren

Hallo

besser ist es die Equals Methode zu Überschreiben: Guideline for Implementing Equals...

Gruß
Martin

S
417 Beiträge seit 2008
vor 11 Jahren

'voksneu' ist 'List<Vokabel>' (aber unwichtig)

Ganz unwichtig ist das nicht. Wenn du als Datenstruktur eine HashSet<> anstelle einer List<> nimmst, dann brauchst du deinen if-Anweisung nicht mehr, sofern du die Equals- und GetHashCode-Methode der Vokabel-Klasse überschrieben hast.
Ein ähnliches Problem mit Duplikaten hatten wir erst heute: [erledigt] Eigene Objekte als Key in Dictionary (keine doppelten)

Hinweis von herbivore vor 11 Jahren

Den Unterschied zwischen Referenz- und Wertvergleich sollte man kennen. Fällt auf jeden Fall unter die Grundlagen, die wir voraussetzen. Genauso wie die Frage, wie man für die eigenen Objekten einen Wertvergleich implementiert. Beachte insofern bitte [Hinweis] Wie poste ich richtig? Punkt 1.1.1 und 1.1.

Thema geschlossen