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!