== 演算子をオーバーロードする場合の null 値の処理
場合によっては、次のコードで == 演算子をオーバーロードしようとすると、無限再帰が発生する可能性があります:
<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>
問題は、特定の null チェックを行わないと、== 比較で == 演算子オーバーロード メソッドが再帰的に呼び出され、foo1 と foo2 を比較することです。 foo1 が空であるため、再帰ループがトリガーされます。
この問題を解決するには、ReferenceEquals
を使用して null 値チェックを追加します。
<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
を使用して null 値をチェックすることで、== 演算子のオーバーロードされたメソッドが無限に再帰せず、null 比較を適切に処理できるようになります。
以上が== 演算子を Null 値でオーバーロードするときに無限再帰を防ぐ方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。