【问题标题】:Equality for anonymous types [duplicate]匿名类型的平等[重复]
【发布时间】:2014-05-16 20:14:17
【问题描述】:

当用于比较匿名类型时,为什么 Equals() 和 == 的语义不同?为什么一个比较值而另一个比较引用?背后的原因是什么?

【问题讨论】:

    标签: c# equality anonymous-types


    【解决方案1】:

    == 不调用Equals,它寻找== 重载运算符。由于匿名类型没有重载 == 运算符,因此 C# 对其使用引用比较。

    但是对于Equals,它会比较字段值。这就是==Equals 之间的结果不同的原因。

    Anonymous Types (C# Programming Guide)

    因为匿名类型的 Equals 和 GetHashCode 方法是 根据 Equals 和 GetHashCode 方法定义 属性,相同匿名类型的两个实例仅相等 如果它们的所有属性都相等。

    【讨论】:

    • 谢谢!在底层,C# 编译器为匿名类型实现了一个密封类。 == 比较引用的原因对我来说非常有意义。但是 Equals() 比较引用类型的值对我来说没有多大意义。
    • 在使用 Equals() 比较字符串时,我认为只有字符串是一个例外。但是,在字符串的情况下,这是有道理的。
    猜你喜欢
    • 1970-01-01
    • 2019-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-04
    • 1970-01-01
    相关资源
    最近更新 更多