重載 == 運算子時處理空值
在某些情況下,嘗試使用以下程式碼重載 == 運算子可能會導致無限遞歸:
<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>
問題在於,如果沒有進行具體的空值檢查,== 比較會遞歸呼叫 == 運算子重載方法來比較 foo1 和 foo2。由於 foo1 為空,因此會觸發遞歸循環。
為了解決這個問題,可以使用 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中文網其他相關文章!