我有一个四叉树,它有一个删除方法,每次我从游戏中删除一个项目,我称之为这个方法。问题是在foreach
循环中,子变量为null。如何绕过这个方法,所以如果变量为null,它不会给我一个错误?
private void CollapseChildren(RectangleTreeNode node)
{
foreach (RectangleTreeNode child in node.Children)
{
if (child == null)
{
return;
}
while (child.Items.Count > 0)
{
MoveUp(child.Items[0]);
}
}
node.Children = null;
}
这是删除方法。
private void Remove(RectangleTreeNode node, RectangleTreeItem item)
{
node.Items.Remove(item);
item.Parent = null;
while (node != null)
{
node.ItemCount--;
if (node.ItemCount < 6)
{
CollapseChildren(node);
}
node = node.Parent;
}
}
如果值为null,那么我不应该遍历nodes.Children
中的子项,因为如果我循环执行,那么我会在子变量处得到错误。这意味着节点没有孩子。
答案 0 :(得分:1)
您已经在检查每个child
是否为null
。
如果node.Children
存在null
的风险,请在访问之前检查一下:
private void CollapseChildren(RectangleTreeNode node)
{
if (node.Children == null)
return;
foreach (RectangleTreeNode child in node.Children)
{
...
...
}
}
答案 1 :(得分:1)
在调用node.Children
循环之前,您必须检查foreach
是否为空,因此您的方法变为:
private void CollapseChildren(RectangleTreeNode node)
{
if (node.Children == null)
{
// exit the method, or do whatever is appropriate when node.Children is null
return;
}
foreach (RectangleTreeNode child in node.Children)
{
if (child == null)
{
return;
}
while (child.Items.Count > 0)
{
MoveUp(child.Items[0]);
}
}
node.Children = null;
}