安全地从循环列表中删除列表

时间:2011-08-15 06:37:44

标签: c# list

我正在遍历主列表中的所有列表,如果出现特定情况。我想删除该特定列表。

它不起作用。

for (int i = 0; i < mainList.Count; i++)
{
     if (mainList[i].Dead == true) //
     {
          mainList.removeAt(i);//what will be affect on mainList.Count;
     }
 }

4 个答案:

答案 0 :(得分:9)

mainList.RemoveAll(x => x.Dead);

答案 1 :(得分:4)

构造for循环的方式只有在mainList.Count保持不变的情况下才会起作用,但是你在循环中删除了元素。你明白为什么这是一个问题吗?每当你删除一个元素时,你最终都会跳过对元素的检查。

我认为您可以使用foreachmainList.remove,但我不确定。另一种解决方案是让你的循环计数向下:

for (int i = mainList.Count-1; i >= 0; i--)
{
    if (mainList[i].Dead == true)
    {
         mainList.removeAt(i);
    }
}

答案 2 :(得分:0)

您将无法这样做,因为您正在改变列表的长度。我会这样做:

var newList = mainList.Where(y => !y.Dead).ToList();

答案 3 :(得分:0)