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]。我该如何处理这种情况?
由于
答案 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;但是使用表达式本身或者需要否定符号