避免foreach循环中可能为null的变量出现null引用异常
本文关键字:null 变量 异常 引用 循环 foreach 避免 | 更新日期: 2023-09-27 18:26:15
我有一个四叉树,它有一个remove方法,每次我从游戏中移除一个项目时,我都会调用这个方法。问题是在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
中的子级,因为如果我循环遍历,那么我会在子变量处得到错误。意味着节点没有子节点。
您已经在检查每个child
是否为null
。
如果node.Children
有null
的风险,那么在访问之前也要检查一下:
private void CollapseChildren(RectangleTreeNode node)
{
if (node.Children == null)
return;
foreach (RectangleTreeNode child in node.Children)
{
...
...
}
}
在调用foreach
循环之前,您必须检查node.Children
是否为null,因此您的方法变为:
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;
}