2014-05-16 181 views
6

爲什麼Equals()和==的語義在用於比較匿名類型時有所不同?爲什麼要比較數值和其他比較參考?它背後的原因是什麼?匿名類型的平等

回答

9

==不叫Equals,它尋找==重載操作符。由於匿名類型沒有超載==運算符,因此C#使用它的引用比較。

但與Equals它比較字段值。這就是爲什麼==Equals之間的結果不同。

Anonymous Types (C# Programming Guide)

由於上匿名類型的Equals和GetHashCode方法中的Equals和 性質的GetHashCode方法的術語被定義 ,相同的匿名類型的兩個實例是相等僅 如果所有他們的屬性是平等的。

+0

謝謝!在底層,C#編譯器爲匿名類型實現了一個密封類。爲什麼==比較參考對我來說很合理。但Equals()比較引用類型的值對我來說沒有多大意義。 – DBK

+0

雖然只有字符串是一個例外,當它來比較字符串使用Equals()。但是,在字符串的情況下,這是有道理的。 – DBK