List.Remove from one也从另一个中删除

Chr*_*ish 1 c# foreach list winforms

我的方法运行如下:

public void FrmClosed_Action(string name)
       {
           foreach (string item in this.origList)
           {
               if (item == name)
               { this.itemList.Remove(item); }
           }
           if (this.itemList.Count == 0)
           { Application.Exit(); }
       }
Run Code Online (Sandbox Code Playgroud)

当我运行代码itemList = 2origList = 2.当一个item被发现匹配时name,itemList正确地减少到1但奇怪的是这样origList.这种情况会立即发生,一旦foreach进入第二次运行就会崩溃说collection was modified; enumeration operation may not compute.

Tho*_*que 9

它看起来像origListitemList参考的同一个实例List<string>.确保它itemList实际上是一个独特的副本origList,即不要这样做itemList = origList,因为它只是将引用复制到同一个列表中.相反,您可以这样做itemList = new List<string>(origList),这会创建一个独立的副本.