正確處理空值檢查,避免'=='運算子重載中的無限遞歸
重載'=='運算子時,務必正確處理空值檢查以防止無限遞歸。問題中提供的程式碼片段展示了一種錯誤的方法:
<code>if (foo1 == null) return foo2 == null;</code>
此條件會導致無限遞歸,因為對 == 的第二次呼叫將再次嘗試檢查 foo1 是否為空,從而導致死循環。
正確的程式碼
為了解決這個問題並避免無限遞歸,請使用 object.ReferenceEquals
進行空值檢查:
<code>if (object.ReferenceEquals(foo1, null)) return object.ReferenceEquals(foo2, null);</code>
此條件可以正確處理 foo1 或 foo2(或兩者)為空的情況。如果兩個操作數都為空,則傳回 true;如果一個或兩個操作數不為空,則傳回 false。
完整的修正
下面的修正程式碼將此修改合併到提供的運算子重載中:
<code>public static bool operator ==(Foo foo1, Foo foo2) { if (object.ReferenceEquals(foo1, null)) return object.ReferenceEquals(foo2, null); return foo1.Equals(foo2); }</code>
透過此更改,運算子重載將能夠正確處理空值檢查,而不會導致無限遞歸。
以上是使用空檢查重載'==”運算子時如何避免無限遞歸?的詳細內容。更多資訊請關注PHP中文網其他相關文章!