如何避免運算子重載中處理空值時出現無限遞迴?
在定義比較運算子的重載時,正確處理空值情況至關重要,以避免無限遞歸。以下程式碼示範了 == 運算子重載中的無限遞迴問題:
<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>
在此場景中,當其中一個運算元為空時,== 運算子重載會遞歸呼叫自身。為了避免此問題,需要使用 ReferenceEquals
方法明確檢查空值:
<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>
透過使用 ReferenceEquals
,重載會在繼續進行相等比較之前檢查兩個運算元是否都為空。這可以防止無限遞歸並確保在空值情況下行為正確。
以上是處理空值時如何防止運算子重載中的無限遞歸?的詳細內容。更多資訊請關注PHP中文網其他相關文章!