如果List<T2>
是List<T1>
的子类型,为什么T2
不是T1
的子类型?
这种行为背后的限制是什么?
解决这种限制的更好方法是什么?
答案 0 :(得分:3)
狗的名单不是动物名单。如果确实你可以做到
List<Animal> list = new List<Dog>();
list.Add(new Cat());
但是在狗的名单中添加一只猫是无效的。你应该阅读关于协方差和逆变的文章。
答案 1 :(得分:1)
因为那时您可以将T2列表强制转换为T1列表,放宽插入条件,然后将T1对象插入到运行时类型仅接受T2的列表中。
要解决此问题,您可以使用Cast<T1>().ToList()
创建新列表。
答案 2 :(得分:0)
是什么原因只是因为您在讨论的是List<>
,而不是T1
和T2
。您可以使列表可转换,通过自己的类包装它们并定义转换操作