2018-03-17

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);
  }
}

你可能感兴趣的:(2018-03-17)