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

时间:2015-09-21 15:47:56

标签: c# winforms list foreach

我的方法运行以下内容:

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

当我运行代码itemList = 2origList = 2时。如果找到与item匹配的name,则itemList会正确缩减为1,但奇怪的是origList。这种情况会立即发生,只要foreach进入第二次运行,它就会崩溃collection was modified; enumeration operation may not compute

1 个答案:

答案 0 :(得分:9)

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