首页 > 解决方案 > 作为国家的演员表:列表

问题描述

我创建了一个国家资料

public class Country
{
   public string Name { get; set;}
}

和国家列表

public class Countries : List<Country>
{}

现在我想将 List 分配给国家类型变量

Countries countries = new List<Country>(new Country[] {new Country()});

但不幸的是它不起作用。它说

无法将列表转换为国家

原因是什么?我应该将列表更改为其他内容吗?

标签: c#castingcompiler-errors

解决方案


该类Countries派生自List<Country>,这意味着它更具体。您不能将更通用的类分配给旨在用于更具体事物的参考。

Countries countries = new List<Country>(); //Won't work
String s = new object(); //Won't work

可以将特定分配给一般,例如

List<Country> countries = new Countries();  //Will work
object o = ""; //Will work

如果您有 aList<Country>并且需要将其转换为Countries对象,则可以通过实现允许您填充列表的构造函数之一来实现,如下所示:

public class Country
{
    public string Name { get; set; }
}

public class Countries : List<Country>
{
    public Countries(IEnumerable<Country> initializationData) : base(initializationData)
    {
        //No body. Work is done by base class constructor.
    }
}

现在你可以:

List<Country> list = new List<Country>();
Countries countries = new Countries(list);

请注意,这会重复,而不是强制转换列表,因此您最终会得到对包含相同数据的两个不同对象的两个引用。这是唯一的方法。


推荐阅读