我创建了国家(地区)资料
public class Country
{
public string Name { get; set;}
}
和国家/地区列表
public class Countries : List<Country>
{}
现在我想将“列表”分配给“国家/地区”类型变量
Countries countries = new List<Country>(new Country[] {new Country()});
,但是不幸的是它不起作用。它说
无法将列表转换为国家/地区
原因是什么?我应该将List更改为其他名称吗?
答案 0 :(得分:1)
类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
如果您有一个List<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);
请注意,这是对列表的重复而不是强制转换,因此您最终将获得对包含相同数据的两个不同对象的两个引用。这是唯一的方法。
答案 1 :(得分:1)
您不能隐式转换列表。
您需要为您的Countries
类提供一个构造函数:
public class Countries : List<Country>
{
public Countries(Country[] countries) : base(countries)
{
}
}
然后调用它:
Countries countries = new Countries(new Country[] {new Country()});
答案 2 :(得分:1)
我将通过简化您的体系结构来回答您的问题。没有理由要从列表继承。有关更多信息,请参见此答案details。如果您想封装自己国家/地区的逻辑,只需为国家/地区列表添加一个属性。您的模型不需要扩展列表的功能。
public class Countries
{
protected IEnumerable<Country> _countries;
public Countries(IEnumerable<Country> countries)
{
this._countries = countries;
}
}
然后您可以像这样初始化:
var countries = new Countries(new Country[] {new Country()});