假设您有两个不同的类,每个类都有自己的 Equals 实现;使用哪一个?如果只有其中一个有一个怎么办?还是一个都没有?以下任何行是否等效?
object .Equals( first, second )
first .Equals( second )
second .Equals( first )
我猜前两个可能是等价的,但我真的不知道。
它到底有什么作用?
最佳答案
基本上它做了三件事:
- 检查引用是否相等(如果是则返回真)
- 检查引用是否为空(如果任一值为 null 则返回 false;此时 null == null 的情况已经处理完毕)
- 使用
first.Equals(second)
检查值是否相等
如果两个值都具有行为良好的相等实现,则顺序不应该很重要,因为应该实现相等,这样 x.Equals(y)
意味着 y.等于(x)
。但是,我安装的离线文档确实说明了 first.Equals(second)(或 objA.equals(objB) 使用实际参数命名)。 online documentation有趣的是,没有提到这一点。
为了使所有这些具体化,实现可能如下所示:
public static bool Equals(object x, object y)
{
if (x == y) // Reference equality only; overloaded operators are ignored
{
return true;
}
if (x == null || y == null) // Again, reference checks
{
return false;
}
return x.Equals(y); // Safe as we know x != null.
}
关于C#:static object.Equals 如何检查是否相等?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1451454/