我正在遍历主列表中的所有列表,如果出现特定情况。我想删除该特定列表。
它不起作用。
for (int i = 0; i < mainList.Count; i++)
{
if (mainList[i].Dead == true) //
{
mainList.removeAt(i);//what will be affect on mainList.Count;
}
}
答案 0 :(得分:9)
mainList.RemoveAll(x => x.Dead);
答案 1 :(得分:4)
构造for循环的方式只有在mainList.Count
保持不变的情况下才会起作用,但是你在循环中删除了元素。你明白为什么这是一个问题吗?每当你删除一个元素时,你最终都会跳过对元素的检查。
我认为您可以使用foreach
和mainList.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)