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

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

為什么類型推斷在這種情況下不起作用?

為什么類型推斷在這種情況下不起作用?

C#
倚天杖 2023-09-24 11:09:44
假設(shè)我有一個(gè) POCO 和一個(gè) List 類:class MyClass{...}class MyClasses : List<MyClass> {...}IEnumerable<MyClass>以及將 an 映射到列表的以下方法MyClasses:public static TListType ToListOfType<TListType, TItemType>(this IEnumerable<TItemType> list) where TListType : IList<TItemType>, new(){    var ret = new TListType();    foreach (var item in list)    {        ret.Add(item);    }    return ret;}我希望這段代碼能夠編譯,但事實(shí)并非如此:var list = someListOfMyClass.ToListOfType<MyClasses>();但我得到錯(cuò)誤 CS1061“IEnumerable”不包含“ToListOfType”的定義,并且找不到接受“IEnumerable”類型的第一個(gè)參數(shù)的可訪問擴(kuò)展方法“ToListOfType”(您是否缺少 using 指令或程序集引用?)然而,這確實(shí)有效:var list = someListOfMyClass.ToListOfType<MyClasses, MyClass>();我不明白為什么類型推斷不足以讓編譯器知道項(xiàng)目類型是什么,因?yàn)樽兞縯his是已知類型的列表。
查看完整描述

2 回答

?
慕虎7371278

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

類型推斷不會(huì)從泛型方法調(diào)用中推斷出缺少的參數(shù)。相反,它要么推斷所有參數(shù),要么不推斷任何參數(shù)。因此,您不能使用一種類型參數(shù)調(diào)用該方法,并期望編譯器給出其余的參數(shù)。

在這種情況下,可以推斷TItemType,因?yàn)樗挥趨?shù)之一中。TListType但無法推斷,因?yàn)樗欠祷仡愋?。因此最終無法推斷方法簽名,并且您必須指定所有類型參數(shù)。


查看完整回答
反對(duì) 回復(fù) 2023-09-24
?
Cats萌萌

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

正如其他人所說,C# 不支持部分泛型類型參數(shù)推斷。

關(guān)于為什么無法推斷其中一種類型,也許一個(gè)更明顯的例子可以更清楚地說明這一點(diǎn):

TPeeledFruit peeled = Peel<TPeeledFruit, TFruit)(
    this TFruit fruit) where TPeeledFruit: TFruit

好吧,現(xiàn)在你說:

var myPeeledBanana = Peel(myBanana)

編譯器很容易推斷出一定TFruitBanana。

但它如何推斷出實(shí)際情況呢TPeeledFruit?它沒有任何此類信息;您可能會(huì)認(rèn)為這是顯而易見的,因?yàn)槟私馄渲械年P(guān)系,但編譯器沒有這樣的知識(shí)。它唯一知道的是,它TPeeledFruit必須是一個(gè)繼承自的類型TFruit,但可以是無限數(shù)量的類型:它可以Banana再次,它可以是PeeledBanana,它可以是PeeledRipeBanana,PeeledGreenBanana等等。

還要考慮這樣一個(gè)事實(shí):顯式鍵入賦值沒有任何幫助:

PeeledBanana myPeeledBanana = Peel(myBanana)

這也行不通,C# 首先推理賦值右側(cè)的類型,然后計(jì)算賦值是否實(shí)際上合法。如果它是隱式類型變量,則賦值始終有效。


查看完整回答
反對(duì) 回復(fù) 2023-09-24
  • 2 回答
  • 0 關(guān)注
  • 147 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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