我正在构建一个自定义数据结构来保存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;


最后一行抛出未设置为对象实例的Object引用。例外。我不明白为什么会这样。

编辑:还有另一个问题。在我打电话的那一点:

customNode.Index = customNodeParent.children.Count;


customNodeParent为null。我知道发生了什么事。找不到节点。需要解决。

最佳答案

CustomNode声明中,更改

public List<CustomNode> children;




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


在您当前的代码中,您说的是“一个CustomNode具有一个名为children的字段,该字段的类型为List<CustomNode>”,但是此字段的值从未设置过,因此,在创建CustomNode时,childrennull

通过进行上述更改,您说的是“第一次创建时,CustomNodechildren是实际对象,新的List<CustomNode>”。由于这是一个实际对象,而不是null,因此可以安全地要求它提供Count

10-01 19:29