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

MSDNはあなたの友達です。こちらをご覧ください。このforeachステートメントは、舞台裏でIEnumeratorインターフェイスを使用しています。

コレクションが変更されない限り、列挙子は有効なままです。要素の追加、変更、削除など、コレクションに変更が加えられた場合、列挙子は回復不能に無効になり、MoveNextまたはResetを次に呼び出すとInvalidOperationExceptionがスローされます。コレクションがMoveNextとCurrentの間で変更された場合、列挙子がすでに無効になっている場合でも、Currentは設定されている要素を返します。

于 2012-07-01T04:31:24.737 に答える
1

はい、それはあなたが列挙しているコレクションを変更しているからです。

于 2012-07-01T04:26:16.873 に答える
1

foreachコマンドでリストを読み取っている間はリストを変更できません。forコマンドを使用するか、別のリストを取得して新しいリストに値を保持し、別のforループで新しい値を古い値に入れます。

于 2012-07-01T04:26:22.450 に答える