.net 在 C# 中,为什么不能将 List 对象存储在 List 变量中

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

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

中的结果不能隐式将类型System.Collections.Generic.List<string>转换为System.Collections.Generic.List<object>

然后...

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

导致无法将类型System.Collections.Generic.List<string>转换为System.Collections.Generic.List<object>

当然,你可以从字符串列表中提取所有内容,然后一次将其放回一个列表中,但这是一个相当复杂的解决方案.

推荐答案

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

作为旁注,我认为你是否能做反向演员更重要:

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

我已经有一段时间没有使用C#了,所以我不知道这是否合法,但这种类型的强制转换实际上(可能)是有用的.在本例中,您将从一个更一般的类(对象)扩展到一个从一般类扩展而来的更具体的类(字符串).这样,如果您添加到字符串列表中,就不会违反对象列表.

有人知道或者可以测试这样的演员阵容在C#中是否合法吗?

.net相关问答推荐

我的Azure应用服务从哪里获取应用设置?

Msbuild try 构建 msbuild.exe 而不是我的 .csproj 文件

.NET Async / Await:状态机如何知道何时继续执行?

.gitignore 和 Visual Studio 项目:忽略 bin/Debug 目录但不忽略 bin/Release 目录

.NET - WindowStyle = hidden 与 CreateNoWindow = true?

Unity 2.0:如何使用 Resolve 和 ResolverOverride?

如何获取 Sql Server 数据库中所有模式的列表

生产代码中的 System.Diagnostics.Debug.WriteLine

静态代码块

为什么字典比列表快得多?

如何判断对象是否是某种类型的数组?

有没有办法只在 C# 中设置一次属性

如何比较 C# 中的(目录)路径?

.NET 的 String.Normalize 有什么作用?

仅使用 XAML 绘制纯色三角形

如何获得 Bin 路径?

我应该如何删除 DbSet 中的所有元素?

内存分配:堆栈与堆?

DataContractSerializer vs XmlSerializer:每个序列化器的优缺点

安装带有恢复操作的 Windows 服务以重新启动