@keddad
Ученик

Почему происходит NullReferenceException при добавлении экземпляра класса в лист?

У меня есть такой класс:
class Node {
        public DirectoryInfo basePath;

        public List<Node> children;

        private void getChildren(DirectoryInfo path){
            foreach(DirectoryInfo dir in path.GetDirectories()){
                children.Add(new Node(dir));
            }
        }

        public Node(DirectoryInfo path){
            this.basePath = path;

            getChildren(path);
        }
        

    }


Эта штука, теоретически, рекурсивно обходит директории. Проблема в том, что при добавлении нового экземпляра Node в список случается NullReferenceExpetion:
Unhandled exception. System.NullReferenceException: Object reference not set to an instance of an object.
   at sharpgame.Node.getChildren(DirectoryInfo path) in /home/keddad/projects/sharpgame/Stuff/GameField.cs:line 13
   at sharpgame.Node..ctor(DirectoryInfo path) in /home/keddad/projects/sharpgame/Stuff/GameField.cs:line 20
   at sharpgame.Node.getChildren(DirectoryInfo path) in /home/keddad/projects/sharpgame/Stuff/GameField.cs:line 13
   at sharpgame.Node..ctor(DirectoryInfo path) in /home/keddad/projects/sharpgame/Stuff/GameField.cs:line 20
   at sharpgame.GameField..ctor(DirectoryInfo folder) in /home/keddad/projects/sharpgame/Stuff/GameField.cs:line 33
   at sharpgame.Program.Main(String[] args) in /home/keddad/projects/sharpgame/Program.cs:line 7


Я не вполне понимаю, как он может там происходить. 13ая строчка - добавление новой ноды в список:
children.Add(new Node(dir));
Если я правильно понимаю, мы передаем в список экзепляр класса, там неоткуда взяться Nullу. У меня практически нет опыта с C#, так что, вероятно, это довольно примитивная ошибка, но я не могу ее найти :(
  • Вопрос задан
  • 162 просмотра
Решения вопроса 1
FoggyFinder
@FoggyFinder
List нужно предварительно инициализировать:

public List<Node> children = new List<Node>();

Но, обычно, публичные поля это далеко не лучшая стратегия.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы