爲什麼List<T2>
不是List<T1>
的子類型T2
是T1
的子類型? 這種行爲背後的限制是什麼?爲什麼列表<T2>不是列表的子類型<T1>如果T2是.NET中T1的子類型?
解決該限制的更好方法是什麼?
爲什麼List<T2>
不是List<T1>
的子類型T2
是T1
的子類型? 這種行爲背後的限制是什麼?爲什麼列表<T2>不是列表的子類型<T1>如果T2是.NET中T1的子類型?
解決該限制的更好方法是什麼?
狗的列表不是動物列表。如果這是真的,你可以做
List<Animal> list = new List<Dog>();
list.Add(new Cat());
但是在狗列表中添加一個貓是無效的。你應該閱讀關於協變和逆變的文章。
由於您可以將T2列表轉換爲T1列表,請放寬插入條件,然後將T1的對象插入到運行時類型只接受T2的列表中。
要解決此問題,您可以使用Cast<T1>().ToList()
創建一個新列表。
什麼是因爲你在談論List<>
,而不是約T1
和T2
。您可以將列表可轉換爲自己的類包裝並定義投射操作
泛型中的協變和逆變:http://msdn.microsoft.com/en-us/library/dd799517%28v=vs.110%29。 aspx –
參見http://stackoverflow.com/questions/6557/in-c-why-cant-a-liststring-object-be-stored-in-a-listobject-variable – Jon
一個選項將使用IEnumerable當你想要該方法支持協變時。 –