关于.net:在C#中,为什么不能列出< string>

In C#, why can't a List<string> object be stored in a List<object> variable

似乎列表对象不能存储在C中的列表变量中,甚至不能以这种方式显式转换。

1
2
3
List<string> sl = new List<string>();
List<object> ol;
ol = sl;

导致无法隐式地将类型System.Collections.Generic.List转换为System.Collections.Generic.List

然后。。。

1
2
3
List<string> sl = new List<string>();
List<object> ol;
ol = (List<object>)sl;

导致无法将类型System.Collections.Generic.List转换为System.Collections.Generic.List

当然,您可以通过从字符串列表中提取所有内容并一次将其放回一个列表中来完成,但这是一个相当复杂的解决方案。


这样想,如果您要进行这样的转换,然后将foo类型的对象添加到列表中,那么字符串列表就不再一致。如果要迭代第一个引用,则会得到类强制转换异常,因为一旦命中foo实例,就无法将foo转换为字符串!

作为旁注,我认为无论您是否可以进行反向转换,都将更加重要:

1
2
3
List<object> ol = new List<object>();
List<string> sl;
sl = (List<string>)ol;

我有一段时间没有使用过C,所以我不知道这是否合法,但这种类型的演员表实际上(潜在)是有用的。在本例中,您将从一个更通用的类(对象)转到一个更具体的类(字符串),该类(字符串)从通用类扩展到更具体的类(字符串)。这样,如果您添加到字符串列表中,就不会违反对象列表。

是否有人知道或可以测试这样的演员是否合法?