5

重载比较运算符,如果两个变量指向同一个对象(即不是值)如何比较

public static bool operator ==(Landscape a, Landscape b)
{
    return a.Width == b.Width && a.Height == b.Height;
}

public static bool operator !=(Landscape a, Landscape b)
{
    return !(a.Width == b.Width && a.Height == b.Height);
}
4

4 回答 4

8

使用 Object.ReferenceEquals 静态方法。

当然,为了让 == 和 != 方法保留其全部功能,您还应该重写 Equals 和 GetHashCode 以便它们向调用者返回一组一致的响应。

于 2009-03-06T05:40:07.720 回答
4

尝试a.ReferenceEquals(b);

于 2009-03-06T05:39:17.973 回答
4

检查两者是否指向同一个对象。您应该使用 Object.ReferenceEquals 方法。如果两者相同或两者都为空,它将返回 true。否则它将返回 false

于 2009-03-06T06:09:41.130 回答
0

我知道这是一个老问题,但如果你要重载 == 或 Object.Equals 方法,你还应该重载反向运算符!=。

在这种情况下,由于您正在比较内部数字,因此您应该重载其他比较运算符 <、>、<=、>=。

将来使用您的类的人,无论是第三方消费者,还是接管您的代码的开发人员,可能会使用 CodeRush 或 Refactor 之类的东西,这将自动“翻转”逻辑(也称为反转条件)和然后将其展平,以突破 25 嵌套 if 综合症。如果他们的代码这样做,并且您重载了 == 运算符而没有重载 != 运算符,它可能会改变您的代码的预期含义。

于 2011-11-03T17:09:10.580 回答