2011-08-31 2 views
2

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

У меня есть класс CustomNode и TreeView будет проходить в 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; 

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

EDIT: Есть еще одна проблема. В тот момент, когда я звоню:

customNode.Index = customNodeParent.children.Count; 

изготовленный под заказNodeParent - null. Я вижу, что происходит. Он не находит узел. Необходимо исправить это.

+0

Является ли 'customNodeParent' null или' customNodeParent.children'? –

ответ

4

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

public List<CustomNode> children; 

в

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

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

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

+0

Ох ... У меня было это раньше, но, должно быть, он случайно удалил его. Спасибо :) – user872416

0

Потому что customNodeParent.children - null.

Перед тем, как попытаться использовать его, необходимо создать экземпляр customNodeParent.children.

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

Смежные вопросы