首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >国家名单: List<Country>

国家名单: List<Country>
EN

Stack Overflow用户
提问于 2018-08-31 17:52:14
回答 3查看 171关注 0票数 1

我创造了一个国家概况

代码语言:javascript
复制
public class Country
{
   public string Name { get; set;}
}

和国家名单

代码语言:javascript
复制
public class Countries : List<Country>
{}

现在我要将List赋给Countries类型的变量。

代码语言:javascript
复制
Countries countries = new List<Country>(new Country[] {new Country()});

但不幸的是它不起作用。上面写着

无法将List转换为Countries

原因是什么?我应该把清单改到别的地方吗?

EN

回答 3

Stack Overflow用户

发布于 2018-08-31 18:00:40

Countries是从List<Country>派生的,这意味着它更具体。您不能将更一般的类分配给用于更具体内容的引用。

代码语言:javascript
复制
Countries countries = new List<Country>(); //Won't work
String s = new object(); //Won't work

你可以将特定的任务分配给将军。

代码语言:javascript
复制
List<Country> countries = new Countries();  //Will work
object o = ""; //Will work

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

代码语言:javascript
复制
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.
    }
}

现在你可以:

代码语言:javascript
复制
List<Country> list = new List<Country>();
Countries countries = new Countries(list);

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

票数 1
EN

Stack Overflow用户

发布于 2018-08-31 18:00:41

你不能隐式转换列表。

您需要为Countries类提供一个构造函数:

代码语言:javascript
复制
public class Countries : List<Country>
{
    public Countries(Country[] countries) : base(countries)
    {
    }
}

然后称之为:

代码语言:javascript
复制
Countries countries = new Countries(new Country[] {new Country()});
票数 1
EN

Stack Overflow用户

发布于 2018-08-31 18:17:04

我将通过简化你的架构来回答你的问题。没有理由从list继承。要获得更多的details,请参见此答案,如果您想封装您的国家的逻辑,只需为国家列表提供一个属性即可。您的模型不需要扩展列表的功能。

代码语言:javascript
复制
public class Countries
{
    protected IEnumerable<Country> _countries;
    public Countries(IEnumerable<Country> countries)
    {
        this._countries = countries;
    }
}

然后,您可以像这样初始化:

代码语言:javascript
复制
var countries = new Countries(new Country[] {new Country()});
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52120555

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档