我正在构建一个自定义数据结构来保存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
时,children
是null
。通过进行上述更改,您说的是“第一次创建时,
CustomNode
的children
是实际对象,新的List<CustomNode>
”。由于这是一个实际对象,而不是null
,因此可以安全地要求它提供Count
。