有没有一种方法可以直接从构造函数中将对象添加到列表中?

时间:2019-10-24 16:19:42

标签: c# list constructor

我正在为学校作业编写一个程序,用于存储观察到的动物列表(我并不是在询问程序的帮助,只是偶然发现了一些有趣的事情)。

我想在动物类中列出动物列表,并认为在构造函数的末尾将创建的动物添加到列表中非常容易和方便,直到我运行代码后,效果似乎很好

我应该已经知道了,但是对象值是null,因为它仍然在构造函数中,并且(我想)实际上尚未创建。

    abstract class Animal
    {
        private static List<Animal> allAnimals;
        private static int amountOfAnimals;
        private int height;
        private double weight;

        public Animal(int height, double weight)
        {
            this.height = height;
            this.weight = weight;
            amountOfAnimals++;
            allAnimals.Add(this);
        }
    }

//and later, when I use it in the "Program" class:
//(animalType, width and height are all user inputs)

        switch (animalType)
        {
            case "lion":
                new Lion(height, weight);
                break;
            case "leopard":
                new Leopard(height, weight);
                break;
            case "cheetah":
                new Cheetah(height, weight);
                break;
            default:
                Console.WriteLine("Animal type does not exist.");
                continue; //it's in a loop, so break would break that
        }

即使Animal.allAnimals.Add(new Lion(height, weight))可以工作,我想知道是否有任何方法可以做我想做的事情。除非我将其移至程序类,否则这还需要我在列表中有一个公共设置器。

仅以为这是一个有趣的概念,并且想知道是否有可能以任何方式实现,即使我高度怀疑这将被视为不良做法。

1 个答案:

答案 0 :(得分:2)

您需要首先实例化列表。

private static List<Animal> allAnimals = new List<Animal>();