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

为什么我不能将`列表'转换为C#中的``列表''?

Susan Sarandon
发布: 2025-01-30 13:06:11
原创
706 人浏览过

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

不变列表:当将派生的类列表传递给期望基类列表的函数时,了解转换限制

,开发人员可能会遇到错误:

cannot convert from 'System.Collections.Generic.List<ConsoleApplication1.DerivedClass>' to 'System.Collections.Generic.List<ConsoleApplication1.BaseClass>'
登录后复制

此错误不是立即直观的,因为人们可能认为派生类列表应与基类列表兼容。要了解这种限制背后的原因,必须在通用集合中掌握协方差的概念。在C#中可以是协变量的或不变的。协变量的集合允许将派生类型替换为其基本类型,而不变的集合则不得。是一个不变集合的示例。这意味着列表&lt; derivedClass&gt;无法分配给列表&lt; baseclass&gt;因为编译器保证列表中的所有元素始终为已声明的T型。 t&gt;防止可能违反类型安全的无效操作。例如,如果列表&lt; baseclass&gt;被分配给列表&lt; derivedClass&gt;,派生的类实例可能会被基础类实例替换,从而导致出乎意料的行为。 >安全地将派生类的列表传递给期望基类列表的函数,开发人员可以利用> iEnumerable&lt; t&gt; ,即

> covariant

。这允许将派生类型替换为基本类型,从而在不损害类型安全性的情况下解决转换问题。>在提供的代码片段中,以下修改解决了错误:

>

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

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