首页 >后端开发 >C++ >为什么我不能将列表分配给C#2.0中的列表?

为什么我不能将列表分配给C#2.0中的列表?

Linda Hamilton
Linda Hamilton原创
2025-02-02 05:21:09673浏览

Why Can't I Assign List to List in C# 2.0?

C# 2.0中的泛型列表赋值限制:List<派生类> 无法直接赋值给 List<基类>

C#中的方差特性指的是类型参与协变或逆变赋值的能力。然而,在C# 2.0中尝试将List<派生类>赋值给List<基类>会面临一些限制,这可能导致不安全的方差:

<code class="language-csharp">List<动物> animalsList = new List<长颈鹿>();</code>

即使显式转换也会失败,这凸显了方差问题。需要明确的是,这不是协变问题,协变问题会在以后的C#版本中解决。事实上,为了确保编译时类型安全,这种赋值是被明确禁止的。

方差潜在的风险可以通过以下示例来说明:

<code class="language-csharp">List<长颈鹿> giraffes = new List<长颈鹿>();
giraffes.Add(new 长颈鹿());
List<动物> animals = giraffes;
animals.Add(new 狮子());</code>

这段代码看似无害,但可能导致意外行为和数据损坏。将派生类型(狮子)赋值给基类型(动物)允许违反类型安全规则。

尽管数组支持运行时检查的引用类型方差,但泛型旨在实现编译时类型安全。

在C# 4中引入了安全的方差支持,但仅限于接口和委托。协变允许用于Func和IEnumerable,而逆变允许用于Action

对于C# 2.0的解决方法,建议使用List.ConvertAll创建新的列表,而不是尝试修改原始列表。

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

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn