【问题标题】:C# object comparisonC# 对象比较
【发布时间】:2011-07-09 21:10:07
【问题描述】:

有人可以指出重载operator== 以执行深度对象比较的想法(而不是引用比较)。

来自 MSDN:

默认情况下,运算符 == 通过确定两个引用是否指示同一个对象来测试引用是否相等。因此,引用类型不必实现 operator == 即可获得此功能。当一个类型是不可变的,即包含在实例中的数据不能改变时,重载运算符 == 来比较值相等而不是引用相等可能很有用,因为作为不可变对象,它们可以被认为与 long 相同因为它们具有相同的价值。在非不可变类型中覆盖 operator == 不是一个好主意。

什么时候真正受益?

而且,如果每个对象都有方法Equals,这使得值比较成为可能,那么为什么有人会使用@987654323 执行 (非引用)比较@声明?

我想我有些不明白,因为这对我来说很奇怪。

【问题讨论】:

    标签: c# comparison equality


    【解决方案1】:

    重载== 运算符允许您编写x == y,这比x.Equals(y) 更自然,即使x 为空也可以工作。

    【讨论】:

    • 请注意,Equals(x, y) 也会处理空值。
    【解决方案2】:

    重载运算符== 只会提高代码的可读性。始终对您定义的类型使用 .Equals(),尤其是对于深度对象比较。

    【讨论】:

      【解决方案3】:

      System.String 是引用类型的经典示例,它受益于深度值相等比较而不是引用比较。

      一般来说,在某些情况下,它使代码更容易编写,并且通过值比较比通过引用比较更好地表达相等的含义。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-04-01
        • 2010-10-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多