在foreach循环中避免变量的空引用异常,可能为空
我有一个具有删除方法的四叉树,并且每次从游戏中删除一个项目时,我都会调用此方法。问题是在foreach
循环中,该子变量为空。我怎样才能绕过这个方法,所以如果变量为空它不会给我一个错误?在foreach循环中避免变量的空引用异常,可能为空
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
孩子,因为如果我通过然后做环我处子变量得到的错误。意思是节点没有孩子。
您已在检查每个child
是否为null
。
如果有的node.Children
是null
风险,然后检查太,对其进行访问之前:
private void CollapseChildren(RectangleTreeNode node)
{
if (node.Children == null)
return;
foreach (RectangleTreeNode child in node.Children)
{
...
...
}
}
仍然有错误。所以它不能在方法中。 – 2014-10-11 02:43:22
堆栈跟踪应该确切地告诉您哪个行正在抛出异常。你能告诉别的吗? – 2014-10-11 02:44:19
我试了下面的答案,它的工作!我只是让他们错误的顺序 – 2014-10-11 02:45:07
你必须检查是否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;
}
您的'return;'语句应该注意避免错误,尽管完全退出该方法可能并不完全符合您的要求。你可以详细说明当值为'null'时你想在该方法中发生什么? – 2014-10-11 02:35:43
如果该值为空,那么我不应该在nodes.Children中循环遍历子元素,因为如果我循环完成,那么我会在子变量中得到错误。含义节点没有子节点 – 2014-10-11 02:37:59
我们的公司策略决不会像'node.Children = null'那样设置集合null,总是创建一个像'node.Children = new RectangleTreeNode [0]'这样的空集合。这避免了错误并且相当简化了逻辑 – 2014-10-11 03:14:18