正确处理空值检查,避免'=='运算符重载中的无限递归
重载'=='运算符时,务必正确处理空值检查以防止无限递归。问题中提供的代码片段展示了一种错误的方法:
<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中文网其他相关文章!