c# - 列出从 child 到 parent 的分配

标签 c# .net generics list

我正在尝试这样做:

List<Parent> test = new List<Child>();

我的类的完整代码是这样的:

class Program
{
    public static void Main(string[] args)
    {
        List<Parent> test = new List<Child>();

        test.Add(new Child());

        test.Add(new AnotherChild());
    }
}

class Parent { }

class Child : Parent { }

class AnotherChild : Parent { }

有人能解释一下为什么会出现这个错误吗:

Error 2 Cannot convert type 'System.Collections.Generic.List' to 'System.Collections.Generic.List' d:\personal\documents\visual studio 2010\Projects\ConsoleApplication3\ConsoleApplication3\Program.cs 20 24 ConsoleApplication3

为什么会这样?

Parent[] test = new Child[10];
List<Parent> result = test.ToList();

谢谢:)

-- 右:

现在我知道原因了:List 被编译为 List`1,List 被编译为 List`2。他们没有任何关系。

最佳答案

更新:因为两种类型,List<Parent>List<Child>不是 co-variant .

即使你传入的通用参数,Child , 继承 Parent , 关系不带入封闭列表类型。因此,生成的两个 List 类型不可互换。

.Net 4.0 引入了协方差/反方差。但是,您的代码仍然无法与 .Net 4.0 一起使用,因为 List 都不是类或 IList接口(interface)将更改为协变。

关于c# - 列出从 child 到 parent 的分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2396747/

相关文章:

c# - PRISM WPF CompositeCommand Execute 方法不起作用

c# - 在 UI 线程上调用异步方法

c# - 在 C# 应用程序中更新 MS Access 数据库

c# - 从 Unity 项目进行 REST 调用

c# - C# App 中显示游戏图形的最佳方向

c# - 如何比使用 DynamicInvoke 更快地调用委托(delegate)?

java - 用于泛型类扩展的 Mockito/Powermock 类构造

扩展或者是父类的 Java 泛型类型

java - 创建类型 X 的通用字段并通过反射将其值设置为(不相关的)类型 Y 不会导致 IllegalArgumentException

.Net float 到双倍转换