For循环在C#中迭代一半

时间:2016-09-29 17:32:35

标签: c# list for-loop

在下面的代码片段中,如果列表中不存在值,我试图隐藏树的子节点。目前,我有63个子节点,但循环迭代前32个值。我无法让它运行全部子节点。如果您建议诊断问题,我将非常感激。

for (int i = 0; i < docTree.Nodes[0].ChildNodes.Count; i++)
{
    if (tempList.Contains(docTree.Nodes[0].ChildNodes[i].Value))
    {

    }
    else {
        docTree.Nodes[0].ChildNodes.RemoveAt(i);
    }
}

1 个答案:

答案 0 :(得分:3)

如果您removeAt(0)启动时有63个节点,那么您有62个节点,i将增加到1.先前在索引1处的节点现在位于索引0并将被跳过。你的for循环从未实际查看该节点。这会以一种只检查一半节点的方式重复。您应该从最后一个索引开始并减少回零,以便删除一个节点不会影响您尚未检查的列表中的节点。

您应该始终注意迭代列表或数组的for循环并在循环中修改它。发生这种情况时会出现许多毛茸茸的情况。