的幫助這樣說:Equals和GetHashCode如何在匿名類型上實現?
匿名類型是直接從object派生不能被強制轉換爲任何類型,除了對象類類型和 。編譯器爲每個匿名類型提供一個 名稱,儘管您的應用程序無法訪問 它。從公共語言運行時的角度來看,匿名的 類型與其他任何引用類型沒有區別。
如果在組裝兩個或更多個匿名對象初始化指定在相同的順序,並且具有相同 名稱和類型屬性的 序列,所述編譯器將對象作爲 相同類型的實例。它們共享編譯器生成的類型 信息。
由於上匿名類型的Equals和GetHashCode方法中的Equals和 性質的GetHashCode方法的術語被定義 ,相同的匿名類型的兩個實例是相等僅當所有 它們的性質是相同的。
這些事情是真的,但怎麼樣?參考源明確顯示如何比較對象(ReferenceEquals
)和「直接從對象派生」的類型不能具有此特殊行爲。它與ValueType
中的Equals
的行爲不匹配。
那麼它是如何完成的?匿名類型如何覆蓋Equals()
和GetHashCode()
而沒有任何可見的覆蓋?
編譯器生成引用類型。我不知道你在「參考資料來源」(我認爲你的意思是微軟的參考源網站)中看到的是什麼,但它不會提供信息,因爲參考資源不可能有一種類型,直到你編譯你的代碼纔會生成。您應該在_your_匿名類型中尋找像ILDASM,dotPeek,Reflector等類似的東西,並且您會看到這些方法的實現。 –