System.InvalidOperationException

オブジェクトの現在の状態に対して無効なメソッド呼び出しが行われた場合にスローされる例外。

[実験ソース(C#)]

using System;

using System.Collections.Generic;

namespace ConsoleApplication1

{

    class Program

    {

        static void Main(string[] args)

        {

            List<int> a = new List<int>();

            a.Add(1);

            foreach (int b in a)

            {

                a.Add(b);

            }

        }

    }

}

[結果]


ハンドルされていない例外: System.InvalidOperationException: コレクションが変更されました。列挙操作は実行されない可能性があります。
場所 System.ThrowHelper.ThrowInvalidOperationException(ExceptionResource resource)
場所 System.Collections.Generic.List`1.Enumerator.MoveNextRare()
場所 System.Collections.Generic.List`1.Enumerator.MoveNext()
場所 ConsoleApplication1.Program.Main(String[] args) 場所 Program.cs:行 11

[対処など]
foreach でコレクションの列挙を開始した後で、コレクション自体を変更すると発生する。
どうしてもコレクションを変更する必要がある場合は、一旦別のコレクションにコピーしておき、列挙中にコレクションが変更されないようにしてやる。