第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

為什么匿名類型的Equals實(shí)現(xiàn)比較字段?

為什么匿名類型的Equals實(shí)現(xiàn)比較字段?

C#
犯罪嫌疑人X 2019-11-19 10:16:33
我只是想知道為什么語(yǔ)言的設(shè)計(jì)師決定在匿名類型上實(shí)現(xiàn)Equals的方式類似于Equals在值類型上實(shí)現(xiàn)。這不是誤導(dǎo)嗎?public class Person{    public string Name { get; set; }    public int Age { get; set; }}public static void ProofThatAnonymousTypesEqualsComparesBackingFields(){    var personOne = new { Name = "Pawe?", Age = 18 };    var personTwo = new { Name = "Pawe?", Age = 18 };    Console.WriteLine(personOne == personTwo); // false    Console.WriteLine(personOne.Equals(personTwo)); // true    Console.WriteLine(Object.ReferenceEquals(personOne, personTwo)); // false    var personaOne = new Person { Name = "Pawe?", Age = 11 };    var personaTwo = new Person { Name = "Pawe?", Age = 11 };    Console.WriteLine(personaOne == personaTwo); // false    Console.WriteLine(personaOne.Equals(personaTwo)); // false    Console.WriteLine(Object.ReferenceEquals(personaOne, personaTwo)); // false}乍一看,所有打印的布爾值都應(yīng)該為false。但是Equals當(dāng)使用Persontype并使用匿名類型時(shí),帶有調(diào)用的行將返回不同的值。
查看完整描述

3 回答

?
慕虎7371278

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ǔ)義正確EqualsGetHashCode實(shí)現(xiàn)。


查看完整回答
反對(duì) 回復(fù) 2019-11-19
?
牛魔王的故事

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)。


查看完整回答
反對(duì) 回復(fù) 2019-11-19
  • 3 回答
  • 0 關(guān)注
  • 405 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)