从循环中的list中安全地移除list

本文关键字:list 安全 循环 | 更新日期: 2023-09-27 18:05:49

我正在遍历mainlist中的所有列表,如果出现特定条件。我想删除那个特定的列表。

它不工作。

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

从循环中的list中安全地移除list

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

您构建for循环的方式,它只会在mainList.Count保持不变的情况下工作,但您在循环期间删除元素。你知道为什么这是个问题吗?当你删除一个元素时,你最终会跳过它后面的元素的检查。

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

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

您将无法做到这一点,因为当您这样做时您正在改变列表的长度。我将这样做:

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

如何在c#中遍历可枚举集合时修改或删除项

http://bytes.com/topic/c-sharp/answers/238241-how-do-you-modify-array-while-iterating-through