Verarbeitung von Nullwerten beim Überladen des ==-Operators
In einigen Fällen kann der Versuch, den ==-Operator mit dem folgenden Code zu überladen, zu einer unendlichen Rekursion führen:
<code class="language-c#">Foo foo1 = null; Foo foo2 = new Foo(); Assert.IsFalse(foo1 == foo2); public static bool operator ==(Foo foo1, Foo foo2) { return foo1 == null ? foo2 == null : foo1.Equals(foo2); }</code>
Das Problem besteht darin, dass der ==-Vergleich ohne spezifische Nullprüfung rekursiv die überladene Methode ==-Operator aufruft, um foo1 und foo2 zu vergleichen. Da foo1 leer ist, wird eine rekursive Schleife ausgelöst.
Um dieses Problem zu lösen, können Sie mit ReferenceEquals
eine Nullwertprüfung hinzufügen:
<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>
Indem Sie ReferenceEquals
verwenden, um nach Nullwerten zu suchen, stellen Sie sicher, dass die mit dem ==-Operator überladene Methode nicht endlos wiederholt wird, sodass Nullvergleiche ordnungsgemäß gehandhabt werden können.
Das obige ist der detaillierte Inhalt vonWie kann eine unendliche Rekursion verhindert werden, wenn der ==-Operator mit Nullwerten überladen wird?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!