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

标签 c# object static equals

假设您有两个不同的类,每个类都有自己的 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/

相关文章:

c# - 查找接口(interface)和 ip 地址(C# 中的 arp)

c# - 以编程方式用白色填充替换图像中的透明区域?

javascript - 根据键和值对对象数组进行排序

javascript - Object.keys 方法如何对字符串键 id 进行排序

java - 包含静态成员的类实例的垃圾回收

c# - 您是否应该对共享相同私有(private)实现的单独方法进行重复单元测试?

c# - 当 URL 在人为超时后响应时,如何使用 HttpClient.PostAsync 异步?

javascript - NodeJS如何加速这个数组创建功能

c - 同名的两个静态变量(两个不同的文件)和外部其中一个在任何其他文件中

c++ - GCC 对 lambda 中的静态变量做了什么?