Ich habe eine Struktur IntVector2, die eine X- und Y-Eigenschaft hat. Der Operator + mitList.Contains funktioniert nicht wie erwartet mit benutzerdefinierten Strukturargument
überschriebenpublic static IntVector2 operator +(IntVector2 value1, IntVector2 value2)
{
value1.X += value2.X;
value1.Y += value2.Y;
return value1;
}
Wenn diese in einer Liste mit mit der Methode enthält, wird es nicht den Gesamtwert der Addition prüft, sondern nur die Variable „aktuelle“
if (visited.Contains(current + dir))
continue;
Was ist eigentlich hier los?
Edit: Hier ist ein Screenshot der Werte der Variablen, und eine Variablendeklaration, die gleich ist, was ich erwarte den Wert der enthält zu überprüfen.
https://dl.dropboxusercontent.com/u/30062610/Brokestuff.png
Edit2: Hier ist der vollständige Code des Verfahrens, ist es der Beginn einer A * Pathfinding Algorithmus, um den End-Vektor aus dem Startvektor zu finden.
Edit 3: Auch mit der Newstuff-Variable, die einen anderen Wert als der Start hat, trifft die Fortsetzung. Ich bin mir nicht sicher, was es tun könnte. My Equals Override prüft nur, ob X und Y beide gleich sind und gibt wahr zurück, wenn dies der Fall ist.
Hier ist die Gesamtheit des IntVector2 Code: http://pastebin.com/ic108SeF
Bearbeiten 4: Ich änderte den Operator + auf:
public static IntVector2 operator +(IntVector2 value1, IntVector2 value2)
{
return new IntVector2((value1.X + value2.X), (value1.Y + value2.Y));
}
Und das Problem immer noch besteht.
Warum ändern Sie 'value1'? –
Haben Sie Ihre Equals-Definition geändert? ((1,1) + (2,2)). Gleich (3,3) ergibt 'wahr' für mich. – Rob
Ich dachte, dass das Ändern des ersten Arguments mit dem Wert der Sekunde funktionieren würde. Sollte ich es ändern, um einen neuen IntVector2 mit der neuen Summe zurückzugeben, anstatt die erste zu ändern? – user3010006