我得到了这个例外:
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]
感谢您将来的帮助!
答案 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返回它所设置的元素,即使枚举器已经失效。