Mengendalikan nilai nol apabila melebihkan operator ==
Dalam sesetengah kes, cuba membebankan operator == dengan kod berikut boleh mengakibatkan rekursi tak terhingga:
<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>
Masalahnya ialah tanpa semakan nol khusus, perbandingan == secara rekursif memanggil kaedah == operator terlebih beban untuk membandingkan foo1 dan foo2. Oleh kerana foo1 kosong, gelung rekursif dicetuskan.
Untuk menyelesaikan masalah ini, anda boleh menggunakan ReferenceEquals
untuk menambah semakan nilai nol:
<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>
Dengan menggunakan ReferenceEquals
untuk menyemak nilai nol, anda memastikan bahawa kaedah terlampau beban operator == tidak berulang tanpa had, membenarkan perbandingan nol dikendalikan dengan anggun.
Atas ialah kandungan terperinci Bagaimana untuk Mencegah Rekursi Infinite Apabila Melebihkan Operator == dengan Nilai Null?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!