1.用foreach删除会报错,原因:
在foreach中删除元素时,每一次删除都会导致集合的大小和元素索引值发生变化,从需导致在foreach中删除元素会出现异常。
比如我们有{A B C D E F }这些元素, 假设当前D是满足条件的元素(i=3),我们遍历到i = 3将其移除,接着就轮到i = 4的元素
它是F而不是E,因为删除了D之后E就成为i=3的元素, 这样就跳过了E(i=3),假如E也是满足条件的元素,那这趟遍历只
删除了D而保留了E最后就得到一个错误的集合。
2.用for循环,可能少删除,原因:
假设第一项与第二项均符合条件,当i=1时,满足条件执行删除操作,会移除第一个元素,接着第二个元素会前移到第一个元素的位置,即游标1对应
的是第二个元素。接着遍历i=2,也就跳过第二个元素。
3.用for倒序遍历删除,正确方式:
for(inti=list.Count-1;i>=0;i--)
{
if(list[i])
{
list.RemoveAt(i);
}
}