3 回答

TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超4個(gè)贊
匿名類型實(shí)例是沒(méi)有行為或身份的不可變數(shù)據(jù)值。參照比較它們沒(méi)有多大意義。在這種情況下,我認(rèn)為為它們進(jìn)行結(jié)構(gòu)相等比較是完全合理的。
如果要將比較行為切換為自定義方式(引用比較或不區(qū)分大小寫(xiě)),則可以使用Resharper將匿名類型轉(zhuǎn)換為命名類。Resharper還可以生成平等成員。
這樣做還有一個(gè)非常實(shí)際的原因:匿名類型在LINQ連接和分組中可以方便地用作哈希鍵。出于這個(gè)原因,他們需要語(yǔ)義正確Equals
和GetHashCode
實(shí)現(xiàn)。

TA貢獻(xiàn)1830條經(jīng)驗(yàn) 獲得超3個(gè)贊
至于為什么要問(wèn)語(yǔ)言設(shè)計(jì)師呢?
但是我在埃里克·利珀特(Eric Lippert)的文章《關(guān)于在程序集中統(tǒng)一匿名類型的文章》(第二部分)中找到了這一點(diǎn)
匿名類型為您提供了一個(gè)方便的位置來(lái)存儲(chǔ)少量不可變的名稱/值對(duì),但是它給您帶來(lái)了更多好處。它還為您提供了Equals,GetHashCode的實(shí)現(xiàn),并且與本次討論最緊密的是ToString。(*)
注釋中為什么會(huì)出現(xiàn)以下內(nèi)容:
(*)我們?yōu)槟峁〦quals和GetHashCode,以便您可以在LINQ查詢中使用匿名類型的實(shí)例作為執(zhí)行連接的鍵。由于性能原因,LINQ to Objects使用哈希表實(shí)現(xiàn)聯(lián)接,因此,我們需要Equals和GetHashCode的正確實(shí)現(xiàn)。
- 3 回答
- 0 關(guān)注
- 405 瀏覽
添加回答
舉報(bào)