首页 > 后端开发 > C++ > 为什么我不能在C#中将`列表'列为``列表''?

为什么我不能在C#中将`列表'列为``列表''?

Susan Sarandon
发布: 2025-01-28 13:51:09
原创
815 人浏览过

Why Can't I Cast a `List` to a `List` in C#?

C# 类型转换难题:为什么 List<string> 不能转换为 List<object>

在 C# 中,尝试将 List<string> 对象赋值给 List<object> 变量会引发一个有趣的异常。这种转换为何不被允许,一直困扰着许多开发者。

问题剖析

考虑以下代码片段:

List<string> sl = new List<string>();
List<object> ol;
ol = sl; // 隐式转换不被允许
ol = (List<object>)sl; // 显式转换也失败
登录后复制

隐式和显式转换尝试均失败,这让我们不禁疑问原因所在。

根本原因

这种限制的主要原因在于列表内部可能出现不一致性。如果我们允许这种转换,随后又向列表中添加类型为 Foo 的对象,则字符串列表将变得不一致。

当迭代第一个列表引用时,我们会遇到类转换异常,因为 Foo 实例无法转换为字符串。维护类型一致性对于确保列表中数据的完整性至关重要。

反向转换:更深入的探讨

然而,关于反向转换,一个有趣的问题出现了:

List<object> ol = new List<object>();
List<string> sl;
sl = (List<string>)ol;
登录后复制

这种转换是否允许?虽然它似乎可能有用,但允许这种转换可能会引入运行时错误或不一致性。从更通用的类(object)到更具体的类(string)的转换,任何添加到字符串列表中的对象可能与对象列表不兼容。

反向转换在 C# 中能否成功?

目前尚不清楚这种反向转换在 C# 中是否合法。如果合法,它将突出显示隐式转换和显式转换之间的区别,后者似乎违反了类型一致性规则。对此方面的进一步测试和澄清将非常有价值。

以上是为什么我不能在C#中将`列表'列为``列表''?的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板