重载 == 运算符时处理空值
在某些情况下,尝试使用以下代码重载 == 运算符可能会导致无限递归:
<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中文网其他相关文章!