info 是一个引用类型(自定义的实体)
returnList 是 List<info> info类型的一个list泛型。
foreach (info in returnList)
            {
                if (packInfoDic[info.StoreBase.Item.ID] == "0")
                {
                     if (dialogResult == DialogResult.No)
                    {
                        break;
                    }
                    {
                        returnList.Remove(info);//加入这条语句的话就报错
                        continue;
                    }                   
                }
            }就是想在foreach遍历的时候将returnList中的一些项目删除。
foreach的时候不允许删除需要遍历的项目吗

解决方案 »

  1.   

    换用for
    如果要删除,最好用while
    int i = 0;
    while(i<returnList.Count)
    {
        if (packInfoDic[returnList[i].StoreBase.Item.ID] == "0")
    {
    if (dialogResult == DialogResult.No)
    {
    break;
    }
    else
    {
    returnList.Remove(returnList[i]);
    continue;
    }                   
    }
    i++;
    }
      

  2.   

    我记得foreach是不能写操作的,只能读操作(C#新手,勿喷)
    同求
      

  3.   

    删除后continue是不行的。好像break掉是可以的。没有具体试过
      

  4.   

    不可以这样用的
    做Remove动作会改变索引,foreach 肯定就不行了嘛楼上正解
      

  5.   

    dui 是不能做修改的 for可以用的
      

  6.   

    foreach + 遍历集合 + 只读
      

  7.   

    foreach 在循环内部不能更改集合大小的
      

  8.   

    foreach是只读的访问,被foreach循环访问的集合是不允许修改的。 
    for(int i=0 实现删除
      

  9.   

    如果要删除,最好用while
    粗略说foreach不允许改地.
      

  10.   

    简单的说,foreach在使用的时候,作用对象collection必须保证在foreach语句block内是不变的,否则会用unpected side effects. Use for instead.
      

  11.   

    foreach中只能进行只读操作,不可以进行修改
      

  12.   

    你用FOREACH做循环当然不行的,如果一旦被删除,整个IN后面的值就是变动了,如果是FOR循环,那么你要逐减,如果是逐增的话,也会出错的
      

  13.   


    我总感觉这个也会出错,比较说,returnList[0]被删除,那么原来returnList[1]不是就变成returnList[0]了,这样就算不出错,那不是也会跳过原本returnList[1]的判断了吗?
      

  14.   

    笨办法:复制一个returnList 循环一个returnList 找出要删的元素 然后在复制的returnList中查找并删除(FOR循环)这样应该就可以了。
      

  15.   

    o ....有点像STL里的迭代器
      

  16.   

    foreach的时候集合是只读的,要删除元素用for网页更新监视工具
    实时js调试工具(IE)
      

  17.   

    用foreach还要注意线程同步的问题,如果可能有其它线程修改集合也会引发错误网页更新监视工具
    实时js调试工具(IE)
      

  18.   

    /*
     *mainTab是TabControl控件,除了选中的TabPage关闭其他的
     *这里就可以动态改变mainTab
     */
     foreach (TabPage tab in mainTab.TabPages)
                {
                    if (tab == mainTab.SelectedTab)
                    {
                        continue;
                    }
                    else
                    {
                        mainTab.TabPages.Remove(tab);
                    }
                }
      

  19.   

    换用for
    如果要删除,最好用whileC# code
    int i = 0;
    while(i<returnList.Count)
    {
        if (packInfoDic[returnList[i].StoreBase.Item.ID] == "0")
        {
            if (dialogResult == DialogResult.No)
            {……
    移除最好用下标!
      

  20.   

    不是有点像...foreach本来就是操作迭代器的...
      

  21.   

    foreach的时候本身的缓存应该是静态的,不然,你删除某个之后,在foreach岂不是会出错?要删除的话,可以用各位楼上的方法,for或者while,也可以foreach的时候将你要删除的内容保存一下,然后在删除。
      

  22.   


    for (int i = myList.Count - 1; i >= 0; i--)
    {
        myList.Remove(i);
    }As above, you can use 'reverse for' to delete every element in 'myList'
      

  23.   

    foreach是只能访问的吧,修改的话,再想办法吧