
Wie vermeide ich eine unendliche Rekursion beim Umgang mit Nullwerten bei der Operatorüberladung?
Beim Definieren von Überladungen von Vergleichsoperatoren ist es wichtig, Nullfälle korrekt zu behandeln, um eine unendliche Rekursion zu vermeiden. Der folgende Code demonstriert das Problem der unendlichen Rekursion beim Überladen des ==-Operators:
<code class="language-c#">Foo foo1 = null;
Foo foo2 = new Foo();
Assert.IsFalse(foo1 == foo2);
public static bool operator ==(Foo foo1, Foo foo2) {
if (foo1 == null) return foo2 == null;
return foo1.Equals(foo2);
}</code>In diesem Szenario ruft sich die Operatorüberladung == selbst rekursiv auf, wenn einer ihrer Operanden leer ist. Um dieses Problem zu vermeiden, müssen Sie mithilfe der Methode ReferenceEquals explizit nach Nullwerten suchen:
<code class="language-c#">Foo foo1 = null;
Foo foo2 = new Foo();
Assert.IsFalse(foo1 == foo2);
public static bool operator ==(Foo foo1, Foo foo2) {
if (object.ReferenceEquals(null, foo1))
return object.ReferenceEquals(null, foo2);
return foo1.Equals(foo2);
}</code>Mithilfe von ReferenceEquals prüft die Überladung, ob beide Operanden leer sind, bevor sie mit dem Gleichheitsvergleich fortfährt. Dies verhindert eine unendliche Rekursion und stellt das korrekte Verhalten im Nullfall sicher.
Das obige ist der detaillierte Inhalt vonWie kann eine unendliche Rekursion bei der Operatorüberladung beim Umgang mit Nullen verhindert werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!
Der Unterschied zwischen Gateway und Router
Verwendung der sqrt-Funktion in Java
Checken Sie den virtuellen Standort auf DingTalk ein
WeChat-Momente können nicht aktualisiert werden
ASUS x402c
Der Unterschied zwischen Fußnoten und Endnoten
So konvertieren Sie Ape in WAV
Was sind die Parameter des Festzeltes?