.NET List.Find ошибка во время выполнения - PullRequest
2 голосов
/ 31 августа 2011

Я строю пользовательскую структуру данных для хранения TreeView, чтобы я мог ее сериализовать.Этот бит не имеет значения и является фоновым, но я помещаю его здесь.

У меня есть класс CustomNode, и древовидное представление будет храниться в List<CustomNode>:

private class CustomNode
    {
        public CustomNode()
        {}

        public CustomNode (string name)
        {
            NodeName = name;
        }
        public string NodeName { get; set; }
        public int Level { get; set; }
        public int Index { get; set; }
        public CustomNode parent;
        public List<CustomNode> children;
    }

Этоэто актуальная проблема, которую я пытаюсь решить.В какой-то момент в моем коде я хочу найти родителя определенного CustomNode, поэтому я делаю:

   CustomNode customNode = new CustomNode();
   //initialise properties of customNode (below)
   . 
   .
   .
   CustomNode customNodeParent = new CustomNode();
                            customNodeParent = listOfCustomNodes.Find(_customNode => (_customNode.Index == node.Index && _customNode.Level == node.Level));
   customNode.Index = customNodeParent.children.Count;

В последней строке выдается ссылка на объект, не установленная для экземпляра объекта. исключение.Я не понимаю, почему это происходит.

РЕДАКТИРОВАТЬ: Есть еще одна проблема.В тот момент, когда я звоню:

customNode.Index = customNodeParent.children.Count;

customNodeParent имеет значение null.Я вижу, что происходит.Это не найти узел.Нужно это исправить.

Ответы [ 2 ]

4 голосов
/ 31 августа 2011

В вашем объявлении CustomNode измените

public List<CustomNode> children;

на

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

С вашим текущим кодом вы говорите: "CustomNode имеет поле с именем children типа List<CustomNode> ", но значение этого поля этого поля никогда не устанавливается, поэтому при создании CustomNode значение children равно null.

.Выше говорилось, что «при первом создании CustomNode s children является реальным объектом, новым List<CustomNode>».Поскольку это фактический объект, а не null, можно с уверенностью спросить его о Count.

0 голосов
/ 31 августа 2011

Поскольку customNodeParent.children является нулевым.

Вам нужно создать экземпляр customNodeParent.children, прежде чем пытаться его использовать.

Проще всего сделать в объявлении, затем, возможно, в конструкторе и какв крайнем случае, в вашем экземпляре кода вне класса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...