将元素添加到null(空)List 财产[重复]

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将元素添加到null(空)List 财产[重复]相关的知识,希望对你有一定的参考价值。

这个问题在这里已有答案:

我遇到了问题。

问题是我尝试将对象添加到此对象的列表中。这个列表是一个属性,没有错误,但是当我运行它时,此时失败,因为:“NullReferenceException”。听起来合乎逻辑,因为列表的属性是“null”,但我不能声明属性,可以吗?

这是一些代码段:

class Maps
{
    protected virtual List<Ant> AllAntsAtMap { get; set; }

[...]

class Quadrangle : Maps
{
    protected override List<Ant> AllAntsAtMap { get; set; }

    public override void AddAntToMap(Ant ant)
    {
        AllAntsAtMap.Add(ant);  //Error here
    }
    public override void AddAntsToMap(List<Ant> ants)
    {
        foreach (Ant ant in ants)
        {
            AddAntToMap(ant);
        }
    }

[...]

答案

在构造函数中初始化列表:

class Maps
{
    public Maps()
    {
        AllAntsAtMap = new List<Ant>();
    }

    ...
}

(由于属性是在超类Maps中声明的,我会在那里进行初始化,而不是在子类Quadrangle中进行初始化。)

另一答案

它在C#6中更简单:

protected List<Ant> AllAntsAtMap { get; set; } = new List<Ant>();
另一答案

您应该在使用前初始化AllAntsAtMap。您可以使用构造函数:

public Quadrangle()
{
    AllAntsAtMap = new List<Ant>();
}
另一答案

您需要在添加之前实例化列表:

this.AllAntsAtMap = new List<AllAntsAtMap>();
另一答案

在构造函数中初始化列表。

class Maps
{
    protected virtual List<Ant> AllAntsAtMap { get; set; }

    public Maps()
    {
        AllAntsAtMap = new List<Ant>();
    }

}

除非您特别需要基类的单独列表,否则不需要覆盖Quadrangle中的list属性。如果在子类中有单独的列表,则需要在子类构造函数中初始化该列表。

如果基类不应该具有list属性的实现,那么你应该使它成为abstract而不是virtual,并在实现该属性的子类中初始化它。

以上是关于将元素添加到null(空)List 财产[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何删除数组中的空元素[重复]

将元素添加到java中的字符串列表[重复]

java开发 怎么判断list集合中的元素全为null

jquery 向空数组中添加元素,重复的就不添加到空数组中请问该如何编写

检查空或 null List<string>

从列表列表中删除 NULL 元素