在C#中,我有一個類MyObj,它實現了一個接口IMyInterface。在C#中,爲什麼從對象列表到接口列表的轉換拋出異常?
我現在有MyObj中類的列表的集合:
IEnumerable<List<MyObj>> myObjGroups
,我希望把它轉換/轉換爲
IEnumerable<List<IMyInterface>> myInterfaceGroups
,一切我都試過已拋出異常。
「」類型的異常出現在System.Core.dll但在用戶代碼中沒有處理 其他信息:無法轉換類型的對象「System.Collections.Generic.List ` 1 [MyObj中]'鍵入'System.Collections.Generic.List ` 1 [IMyInterface]'。
我曾嘗試:
IEnumerable<List<IMyInterface>> myInterfaceGroups= new List<List<IMyInterface>>(myObjGroups.Cast<List<IMyInterface>>());
和:
IEnumerable<List<IMyInterface>> myList = myObjGroups.Cast<List<IMyInterface>>();
兩者似乎在運行時拋出異常。
關於我在做什麼錯的任何建議?
'名單'不是'名單'所以演員表無效。你可以使用IEnumerable >'。如果你需要內部列表然後'myObjGroups.Select(l => l.Cast ()。ToList())'。 –
Lee
就像@李說的那樣,一個'List'不是'List '。這是因爲'List '在'T'中不是協變的(它不是'List ')。那是因爲這個類有成員,比如'Add'方法,使得協變不可能。一個接口,例如'IReadOnlyList '可以工作。如果只是'MyObj'是一個實現'IMyInterface'的引用類型,'IReadOnlyList '是一個'IReadOnlyList '。 'IEnumerable '是協變的。 –