C#:静态object.Equals如何检查是否相等?

Svi*_*ish 21 c# static equals object

假设你有两个不同的类,每个类都有自己的Equals实现; 使用哪一个?如果只有一个人有一个怎么办?或者他们都没有?以下任何一行是否相同?

object .Equals( first, second )
first .Equals( second )
second .Equals( first )
Run Code Online (Sandbox Code Playgroud)

我猜测前两个可能是等价的,但我真的不知道.

它到底是做什么的?

Jon*_*eet 40

基本上它做了三件事:

  • 检查引用相等性(如果是,则返回true)
  • 检查引用是否为null(如果任一值为null,则返回false;现在已经处理了null == null的情况)
  • 检查值是否相等 first.Equals(second)

排序不应该的问题,如果这两个值都乖巧平等的实现,作为平等应该被实现,使得x.Equals(y)暗示y.Equals(x).不过,我已经安装了离线文档中则状态first.Equals(二)(或objA.equals(objB)使用真正的参数命名)中规定.该在线文档并没有提到这一点,有趣的是.

为了使所有这些具体,实现可能如下所示:

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.
}
Run Code Online (Sandbox Code Playgroud)

  • 必须强调的是,静态“Object.Equals”和虚拟“first.Equals(second)”之间的主要区别在于,如果“first”是空引用,则后者**将失败**。 (2认同)