Total List-Weirdness?
Übersicht

![]() |
FetzeBetreff: Total List-Weirdness? |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi
Ich habe seit jetzt rund 4 Tagen mit einem Bug zu kämpfen, der jeglicher Logik entbehrt. Schaut euch mal diesen Code an: Code: [AUSKLAPPEN] DebugLog listUpdated.Contains(Self) listUpdated.Remove Self iCountUpdated:- 1 DebugLog "->Station " + sName + "-> SetUpdateState(False)" DebugLog listUpdated.Contains(Self) Liefert mir zurück: Zitat: DebugLog:1 DebugLog:->Station Beta-> SetUpdateState(False) DebugLog:1 ... hat jemand eine Erklärung dafür? |
||
![]() |
Fetze |
![]() Antworten mit Zitat ![]() |
---|---|---|
Okay, ich hab den Fehler gerade gefunden, nachdem ich langsam begann, an einen Fehler seitens BRL zu denken.
LinkedList verwendet für FindLink und damit auch für alle damit verbundenen Methoden und Funktionen inklusive Remove( obj:Object ) die COmpare-Methode des Objekts, um seine Identität zu prüfen. Daraus ergeben sich schwerwiegende Fehler, sollte dabei mehr als ein Objekt in der Liste den Wert 0 zurückliefern, da so beide für das gleiche Objekt gehalten werden und davon das erste in der Liste entfernt wird. Also: Immer schön Sicherheitsprüfungen in die COmpare-Methode schreiben. |
||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Geht einfacher: Garnicht die Compare überschreiben, wenn du kein eigenständiges Sorting braucht. Dann wird nach Pointerwert sortiert und nur Referenzgleicheobjekte können 0 zurückliefern.
Oder du baust bei dir in die Compare ein, dass nur 0 zurückgeliefert wird bei Pointergleichheit (heisst if other = self return 0) |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
Fetze |
![]() Antworten mit Zitat ![]() |
---|---|---|
Naja, ich hab Compare bei mir für ZOrder verwendet, von daher ist es schon sinnvoll. Allerdings wurde 0 bei allen Objekten mit gleichem ZOrder-Wert zurückgeliefert, was das Problem verursachte. Das habe ich jetzt damit gelöst, dass bei gleichem ZOrder-Wert einfach 1 zurückgegeben wird, es sei denn, Vergleichsobjekt und aufrufendes Objekt sind gleich. | ||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
OK dann macht es rein aus der Logik heraus Sinn, es mit 0 zu lösen. | ||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group