2016-09-29 37 views
-1

在下面的代碼片段中,我試圖隱藏樹的子節點,如果列表中不存在值。目前,我有63個子節點,但循環迭代了前32個值。我無法讓它運行全部的子節點。如果您建議診斷問題,我會很感激。For循環迭代C#中的一半時間#

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); 
    } 
} 
+2

向後迭代。您在迭代節點時刪除節點,這會更改現有節點的索引位置。 – LarsTech

+0

或在刪除後添加'i - ;'以保持同步 –

回答

3

當您啓動你有63個節點,如果你removeAt(0)那麼你有62個節點和i將遞增爲1,這在以前在索引1處的節點現在是在索引0處,將被跳過。你的for循環從來沒有真正看過那個節點。這樣重複的方式只能檢查一半的節點。您應該從最後一個索引開始,然後遞減到零,以便刪除節點不會影響尚未檢查的列表中的節點。

您應該始終注意for循環迭代列表或數組並在循環中修改它。發生這種情況時可能會出現許多毛病。