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

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

將列表<派生類(lèi)>轉(zhuǎn)換為列表<BaseClass>

將列表<派生類(lèi)>轉(zhuǎn)換為列表<BaseClass>

白板的微信 2019-06-15 18:02:21
將列表<派生類(lèi)>轉(zhuǎn)換為列表<BaseClass>雖然我們可以從基類(lèi)/接口繼承,但為什么我們不能聲明List<>使用相同的類(lèi)/接口?interface A{ }class B : A{ }class C : B{ }class Test{     static void Main(string[] args)     {         A a = new C(); // OK         List<A> listOfA = new List<C>(); // compiler Error     }}有繞道嗎?
查看完整描述

3 回答

?
汪汪一只貓

TA貢獻(xiàn)1898條經(jīng)驗(yàn) 獲得超8個(gè)贊

完成這項(xiàng)工作的方法是迭代列表并轉(zhuǎn)換元素。這可以使用ConvertAll來(lái)完成:

List<A> listOfA = new List<C>().ConvertAll(x => (A)x);

您還可以使用Linq:

List<A> listOfA = new List<C>().Cast<A>().ToList();


查看完整回答
反對(duì) 回復(fù) 2019-06-15
?
犯罪嫌疑人X

TA貢獻(xiàn)2080條經(jīng)驗(yàn) 獲得超4個(gè)贊

首先,停止使用無(wú)法理解的類(lèi)名,如A,B,C。使用動(dòng)物,哺乳動(dòng)物,長(zhǎng)頸鹿,或食物,水果,橘子或其他什么關(guān)系是明確的。

那么,你的問(wèn)題是“為什么我不能將長(zhǎng)頸鹿的列表分配給動(dòng)物類(lèi)型列表的變量,因?yàn)槲铱梢詫㈤L(zhǎng)頸鹿分配給動(dòng)物類(lèi)型的變量?”

答案是:假設(shè)你可以。那又會(huì)有什么問(wèn)題呢?

你可以把老虎加到動(dòng)物名單上。假設(shè)我們?cè)试S你把長(zhǎng)頸鹿的列表放在一個(gè)包含動(dòng)物列表的變量中。然后你試著把一只老虎加到這個(gè)名單上。會(huì)發(fā)生什么?你想讓長(zhǎng)頸鹿的名單上有老虎嗎?你想要墜機(jī)嗎?還是希望編譯器首先通過(guò)使分配非法來(lái)保護(hù)您不受崩潰的影響?

我們選擇后者。

這種轉(zhuǎn)換被稱(chēng)為“協(xié)變”轉(zhuǎn)換。在C#4中,我們將允許您在接口和委托上進(jìn)行協(xié)變轉(zhuǎn)換當(dāng)已知轉(zhuǎn)換始終是安全的時(shí)..有關(guān)詳細(xì)信息,請(qǐng)參閱我關(guān)于協(xié)方差和反方差的博客文章。(這周的星期一和星期四都會(huì)有一個(gè)關(guān)于這個(gè)話題的新話題。)


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

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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