2014-03-26 47 views
-2

爲什麼List<T2>不是List<T1>的子類型T2T1的子類型? 這種行爲背後的限制是什麼?爲什麼列表<T2>不是列表的子類型<T1>如果T2是.NET中T1的子類型?

解決該限制的更好方法是什麼?

+0

泛型中的協變和逆變:http://msdn.microsoft.com/en-us/library/dd799517%28v=vs.110%29。 aspx –

+0

參見http://stackoverflow.com/questions/6557/in-c-why-cant-a-liststring-object-be-stored-in-a-listobject-variable – Jon

+0

一個選項將使用IEnumerable 當你想要該方法支持協變時。 –

回答

3

狗的列表不是動物列表。如果這是真的,你可以做

List<Animal> list = new List<Dog>(); 
list.Add(new Cat()); 

但是在狗列表中添加一個貓是無效的。你應該閱讀關於協變和逆變的文章。

1

由於您可以將T2列表轉換爲T1列表,請放寬插入條件,然後將T1的對象插入到運行時類型只接受T2的列表中。

要解決此問題,您可以使用Cast<T1>().ToList()創建一個新列表。

0

什麼是因爲你在談論List<>,而不是約T1T2。您可以將列表可轉換爲自己的類包裝並定義投射操作

相關問題