从循环中的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;
}
}
mainList.RemoveAll(x => x.Dead);
您构建for循环的方式,它只会在mainList.Count
保持不变的情况下工作,但您在循环期间删除元素。你知道为什么这是个问题吗?当你删除一个元素时,你最终会跳过它后面的元素的检查。
我认为你可以用foreach
和mainList.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