如果T2是.NET中T1的子类型,为什么List <t2>不是List <t1>的子类型?</t1> </t2>

时间:2014-03-26 09:04:30

标签: c# .net generics inheritance

如果List<T2>List<T1>的子类型,为什么T2不是T1的子类型? 这种行为背后的限制是什么?

解决这种限制的更好方法是什么?

3 个答案:

答案 0 :(得分:3)

狗的名单不是动物名单。如果确实你可以做到

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

但是在狗的名单中添加一只猫是无效的。你应该阅读关于协方差和逆变的文章。

答案 1 :(得分:1)

因为那时您可以将T2列表强制转换为T1列表,放宽插入条件,然后将T1对象插入到运行时类型仅接受T2的列表中。

要解决此问题,您可以使用Cast<T1>().ToList()创建新列表。

答案 2 :(得分:0)

是什么原因只是因为您在讨论的是List<>,而不是T1T2。您可以使列表可转换,通过自己的类包装它们并定义转换操作