C#中LINQ多條件JOIN時為什麼使用匿名類就可以?

來源:互聯網
上載者:User

今天心血來潮,突然想弄明白為什麼LINQ中多條件JOIN的時候,使用new 匿名類就能成功,這是為什麼呢?為什麼LINQ用的equals 而不是常見的“==”?

隨後,進行了如下的測試,發現equals對匿名類對象和具名類對象的處理不太一致

進一步瞭解才發現,

C#中,對匿名類的做了重寫,使得最開始LINQ中的條件判斷能夠成功。不過,根據測試能發現,要讓兩個匿名對象相等,屬性屬性,屬性名稱和屬性值都必須一致才行。

進一步瞭解為什麼equals對具名類對象的表現與匿名類對象的差異,發現equals只是object的虛方法,測試中自訂的類沒有重寫equals,再調用中調用了objects的方法而返回false。同時,也可以參考這個朋友的文章瞭解更多。

如下,是從SO上找到的關於“==”與equals的區別,

所以,通常equals比較的兩個對象的內容,“==”比較的是兩者是否是同一個東西。在自訂的類中,如果要用到對象比較,可以根據需要重寫equals來控制判斷邏輯。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.