带有arrayLists的InvalidOperationException

时间:2012-07-01 04:21:30

标签: c#

我得到了这个例外:

Collection was modified; enumeration operation may not execute.

直接在此代码之后:

     else if (count == 0)
                    {
                        partCategory.Add(words[count].ToString());
                        foreach (string categoryS in partCategory)
                        {
                            if (categoryS != words[count].ToString())
                            {
                                partCategory.Add(words[count].ToString());
                            }
                        }
                    }

我猜测它可能是之前使用的Add方法,但我不确定。

调用堆栈代码:

**********.exe!**********m.FileController.readSortText(string fileName = "**********extracted\\PC120701.txt", System.Windows.Forms.ProgressBar newProgress = {Value = 0 Min = 0 Max = 100}) Line 78 + 0x207 bytes   C#

**********.exe!**********.mainForm.unzipFile(string fileName = "**********") Line 133 + 0x42 bytes  C#
**********.exe!**********.mainForm.decompress_Click(object sender = {Text = "Unzip"}, System.EventArgs e = {X = 49 Y = 7 Button = Left}) Line 163 + 0x17 bytes  C#

[External Code] 
**********.exe!**********.Program.Main() Line 18 + 0x28 bytes   C#

[External Code] 

感谢您将来的帮助!

4 个答案:

答案 0 :(得分:2)

根据foreach文件:Accents mine。

  

foreach语句为数组中的每个元素或实现System.Collections.IEnumerable或System.Collections.Generic.IEnumerable接口的对象集合重复一组嵌入式语句。 foreach语句用于迭代集合以获取所需的信息,但不能用于添加或删除源集合中的项目以避免不可预测的副作用。如果您需要在源集合中添加或删除项目,请使用 for循环

答案 1 :(得分:1)

是的,因为您正在修改您要枚举的集合。

答案 2 :(得分:1)

通过foreach命令读取列表时无法更改列表 你可以使用命令或 取另一个列表并将值保留在新的列表中,然后在另一个列表中循环将新值放入旧值

答案 3 :(得分:1)

MSDN是你的朋友。 Have a look here. foreach语句在幕后使用IEnumerator接口。

  

只要集合保持不变,枚举器仍然有效。如果对集合进行了更改,例如添加,修改或删除元素,则枚举数将无法恢复,并且下一次调用MoveNext或Reset会引发InvalidOperationException。如果在MoveNext和Current之间修改了集合,则Current返回它所设置的元素,即使枚举器已经失效。