Kendalikan semakan nol dengan betul untuk mengelakkan pengulangan tak terhingga dalam beban operator '=='
Apabila membebankan operator '==', pastikan anda mengendalikan semakan nol dengan betul untuk mengelakkan pengulangan tak terhingga. Coretan kod yang disediakan dalam soalan menunjukkan pendekatan yang salah:
<code>if (foo1 == null) return foo2 == null;</code>
Keadaan ini menyebabkan rekursi tak terhingga kerana panggilan kedua ke == sekali lagi akan cuba menyemak sama ada foo1 kosong, menyebabkan gelung tak terhingga.
Kod yang betul
Untuk menyelesaikan masalah ini dan mengelakkan pengulangan tak terhingga, gunakan object.ReferenceEquals
untuk semakan nol:
<code>if (object.ReferenceEquals(foo1, null)) return object.ReferenceEquals(foo2, null);</code>
Keadaan ini mengendalikan kes di mana foo1 atau foo2 (atau kedua-duanya) kosong dengan betul. Mengembalikan benar jika kedua-dua operan kosong;
Pembetulan penuh
Kod yang diperbetulkan di bawah menggabungkan pengubahsuaian ini ke dalam beban operator yang disediakan:
<code>public static bool operator ==(Foo foo1, Foo foo2) { if (object.ReferenceEquals(foo1, null)) return object.ReferenceEquals(foo2, null); return foo1.Equals(foo2); }</code>
Dengan perubahan ini, beban operator yang berlebihan akan dapat mengendalikan semakan nol dengan betul tanpa menyebabkan rekursi tak terhingga.
Atas ialah kandungan terperinci Bagaimana untuk Mengelakkan Rekursi Infinite Apabila Membebankan Operator '==' dengan Pemeriksaan Null?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!