安全重载相等运算符 (==) 避免无限递归
重载相等运算符 (==) 时,务必谨慎处理空值情况,以防止无限递归。当一个或两个操作数为空时,可能会导致 == 检查的无限循环。
为了解决这个问题,请使用 ReferenceEquals
方法 而不是 == 来比较对象的空值。如果两个操作数都为空,或者两个操作数都引用同一个对象,则此方法返回 true,否则返回 false。通过使用 ReferenceEquals
,以下代码可以准确地处理空值:
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); }
通过采用这种方法,== 重载方法可以有效地比较 Foo 对象(无论它们是否为空),而不会触发无限递归。
以上是重载等号运算符(==)时如何避免无限递归?的详细内容。更多信息请关注PHP中文网其他相关文章!