我创造了一个国家概况
public class Country
{
public string Name { get; set;}
}和国家名单
public class Countries : List<Country>
{}现在我要将List赋给Countries类型的变量。
Countries countries = new List<Country>(new Country[] {new Country()});但不幸的是它不起作用。上面写着
无法将List转换为Countries
原因是什么?我应该把清单改到别的地方吗?
发布于 2018-08-31 18:00:40
类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);请注意,这个列表是重复的,而不是强制转换的,因此您将得到两个对包含相同数据的两个不同对象的引用。这是唯一的办法。
发布于 2018-08-31 18:00:41
你不能隐式转换列表。
您需要为Countries类提供一个构造函数:
public class Countries : List<Country>
{
public Countries(Country[] countries) : base(countries)
{
}
}然后称之为:
Countries countries = new Countries(new Country[] {new Country()});发布于 2018-08-31 18:17:04
我将通过简化你的架构来回答你的问题。没有理由从list继承。要获得更多的details,请参见此答案,如果您想封装您的国家的逻辑,只需为国家列表提供一个属性即可。您的模型不需要扩展列表的功能。
public class Countries
{
protected IEnumerable<Country> _countries;
public Countries(IEnumerable<Country> countries)
{
this._countries = countries;
}
}然后,您可以像这样初始化:
var countries = new Countries(new Country[] {new Country()});https://stackoverflow.com/questions/52120555
复制相似问题