我的方法运行以下内容:
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 = 2
和origList = 2
时。如果找到与item
匹配的name
,则itemList
会正确缩减为1
,但奇怪的是origList
。这种情况会立即发生,只要foreach
进入第二次运行,它就会崩溃collection was modified; enumeration operation may not compute
。
答案 0 :(得分:9)
看起来origList
和itemList
引用List<string>
的同一个实例。确保itemList
实际上是origList
的不同副本,即不要itemList = origList
,因为它只是将引用复制到同一列表中。相反,您可以执行itemList = new List<string>(origList)
,这会创建一个独立的副本。