0

我得到了这个例外:

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

4 回答 4

2

根据foreach文档:我的口音。

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

于 2012-07-01T04:27:04.650 回答
1

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

于 2012-07-01T04:26:16.873 回答
1

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

于 2012-07-01T04:26:22.450 回答
1

MSDN 是你的朋友。看看这里。foreach语句在幕后使用 IEnumerator 接口。

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

于 2012-07-01T04:31:24.737 回答