提问者:小点点

将元素添加到null(空)列表<T>属性[duplicate]


我有麻烦了。

问题是我试图将一个对象添加到这个对象的列表中。这个列表是一个属性,没有错误,但是当我运行它的时候,它失败了,因为:“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);
        }
    }

[...]


共1个答案

匿名用户

向null(空)列表属性添加元素

null和空列表是两码事:将元素添加到空列表中可以正常工作,但如果属性是null(因为所有引用类型属性最初都是null),则需要首先用空列表初始化它。

您可以为此使用自动属性初始化器(参见Kwindrzu的回答),或者您可以在构造函数中手动初始化列表:

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

    ...
}

(由于属性是在超类映射中声明的,所以我会在超类映射中而不是在子类四边形中进行初始化。)