Nullprüfungen ordnungsgemäß behandeln, um eine unendliche Rekursion bei „==“-Operatorüberladungen zu vermeiden
Wenn Sie den Operator „==“ überladen, achten Sie darauf, Nullprüfungen ordnungsgemäß durchzuführen, um eine unendliche Rekursion zu verhindern. Der in der Frage bereitgestellte Codeausschnitt zeigt einen falschen Ansatz:
<code>if (foo1 == null) return foo2 == null;</code>
Diese Bedingung führt zu einer unendlichen Rekursion, da der zweite Aufruf von == erneut versucht zu prüfen, ob foo1 leer ist, was eine Endlosschleife verursacht.
Korrekter Code
Um dieses Problem zu lösen und eine unendliche Rekursion zu vermeiden, verwenden Sie object.ReferenceEquals
für die Nullprüfung:
<code>if (object.ReferenceEquals(foo1, null)) return object.ReferenceEquals(foo2, null);</code>
Diese Bedingung behandelt korrekt den Fall, in dem foo1 oder foo2 (oder beide) leer sind. Gibt „true“ zurück, wenn beide Operanden leer sind; gibt „false“ zurück, wenn einer oder beide Operanden nicht leer sind.
Vollständige Korrektur
Der korrigierte Code unten integriert diese Änderung in die bereitgestellte Operatorüberladung:
<code>public static bool operator ==(Foo foo1, Foo foo2) { if (object.ReferenceEquals(foo1, null)) return object.ReferenceEquals(foo2, null); return foo1.Equals(foo2); }</code>
Mit dieser Änderung kann das Überladen von Operatoren Nullprüfungen korrekt verarbeiten, ohne dass es zu einer unendlichen Rekursion kommt.
Das obige ist der detaillierte Inhalt vonWie vermeide ich eine unendliche Rekursion, wenn der Operator „==' mit Nullprüfungen überladen wird?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!