list.RemoveAt in循环

时间:2014-09-10 03:04:57

标签: c# list loops

for (int j = 0; j < list.Count; ++j )
{
     if (list[j].current_status == false)
     {  
       list.RemoveAt(j);  
     }  
}

我想删除列表中有current_status == false的所有项目,但是, 执行语句时:list.RemoveAt(j),list.Count将减1。最后,原始循环不能从list [0]循环到list [list.Count]。我该如何处理这种情况?

由于

3 个答案:

答案 0 :(得分:6)

您可以使用RemoveAll代替RemoveAt

list.RemoveAll(item => item.current_status == false);

答案 1 :(得分:0)

int size = list.Count;
for (int j = 0; j < size; ++j )
{
   if (list[j].current_status == false)
   {  
      list.RemoveAt(j);  
      size--;
      j--;
   }  
}

答案 2 :(得分:0)

同样运行线性时间,这样的反向循环:

for (int j = length - 1; j >= 0; j--)
{
    if (!list[j].current_status)
    {  
        list.RemoveAt(j);
    }
}

旁注:尽量不要用&#34; ==&#34;来测试布尔值。和/或&#34;!=&#34;但是使用表达式本身或者需要否定符号