C# 循环中的list.RemoveAt for(int j=0;j

C# 循环中的list.RemoveAt for(int j=0;j,c#,list,loops,C#,List,Loops,但是,我想删除列表中当前_status==false的所有项目, 当执行语句:list.RemoveAt(j)时,list.Count将减1。最后,原始循环不能从列表[0]循环到列表[list.Count]。我如何处理这种情况 谢谢您可以使用RemoveAll而不是RemoveAt: for (int j = 0; j < list.Count; ++j ) { if (list[j].current_status == false) { list.R

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


谢谢

您可以使用
RemoveAll
而不是
RemoveAt

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

您可以使用
RemoveAll
而不是
RemoveAt

for (int j = 0; j < list.Count; ++j )
{
     if (list[j].current_status == false)
     {  
       list.RemoveAt(j);  
     }  
}
int size=list.Count;
对于(int j=0;j
int size=list.Count;
对于(int j=0;j
也运行线性时间,反向循环如下:

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

旁注:尽量不要用“==”和/或“!=”测试布尔值,而是使用表达式本身或需要使用否定符号

同样运行线性时间,一个反向循环,如下所示:

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

旁注:尽量不要使用“==”和/或“!=”测试布尔值,而是使用表达式本身或需要使用否定符号

这比原始循环理念好得多,因为它在线性时间内运行。这比原始循环理念好得多,因为它在线性时间内运行。