首页 > 后端开发 > C++ > 为什么不能将`列表'直接分配到c#中的列表变量)?

为什么不能将`列表'直接分配到c#中的列表变量)?

Mary-Kate Olsen
发布: 2025-01-28 13:31:09
原创
857 人浏览过

Why Can't a `List` Be Directly Assigned to a `List` Variable in C#?

为什么不能在c#?List<string>中分配给List<object>

在C#中,将A

直接分配给AList<string>>变量会导致编译器错误。 不允许隐式转换,并且使用List<object>>明确铸造也失败了。(List<object>)>

原因:>

>此限制是由于类型安全。 想象一下,如果允许这样的任务。然后,您可以将其他类型的对象(例如,整数或自定义类)以外的类型添加到

>中。 但是,此string最初是List<object>。 尝试使用List<object>参考访问此列表的元素时,遇到非弦乐元素时会导致AList<string>。 编译器通过不称呼分配来防止这种潜在的运行时错误。string> System.InvalidCastException

解决方案:

虽然无法直接分配,但您可以使用替代方法实现所需的效果:

  1. >迭代复制:

    最简单的方法是通过>迭代,并单独添加每个元素。 List<string> List<object>

    linq:
  2. 更简洁的解决方案利用了linq的
  3. 方法:>

    Cast<T>

    反向铸造:
    List<string> stringList = new List<string> { "apple", "banana", "cherry" };
    List<object> objectList = stringList.Cast<object>().ToList();
    登录后复制
反向铸件 - 从

- 是另一回事。 除非您绝对确定>中的每个元素实际上都是

>,否则这通常是不允许的。 在不正确的情况下尝试铸造将导致运行时例外。 C#强制类型安全以防止这种情况。 您需要执行检查或使用Linq的

方法来安全过滤和施放字符串元素。List<object> 因此,尽管反向操作似乎是类似的,但C#中的基本类型安全机制阻止了它是直接的操作。 仔细考虑元素类型在使用通用列表和类型转换时至关重要。List<string>>

以上是为什么不能将`列表'直接分配到c#中的列表变量)?的详细内容。更多信息请关注PHP中文网其他相关文章!

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