【C#】コレクションが変更されました。列挙操作は実行されない可能性があります。の解決方法【InvalidOperationException】
C#で発生するエラー(例外)
System.InvalidOperationException: コレクションが変更されました。列挙操作は実行されない可能性があります。
上記のエラー(例外)が発生したときの解決方法をご紹介します。
下記にC#で発生する例外処理の一覧をまとめていますので解決できない場合は合わせてご確認ください。
⇒例外処理クラス一覧まとめ【原因と解決方法】
C#のおすすめ講座を受講して、最短1週間でC#をマスターしよう!
⇒C#が学べるおすすめプログラミングスクール&オンライン講座11選
C# コレクションが変更されました。列挙操作は実行されない可能性があります。のエラーの原因
「System.InvalidOperationException: コレクションが変更されました。列挙操作は実行されない可能性があります。」
のエラーの原因は
オブジェクトの現在の状態に対して無効なメソッドで操作した
からです。
エラーコードの例は下記の通りです。
var hoges = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
foreach (var hoge in hoges)
{
hoges.Remove(hoge);//参照中のオブジェクトに対して無効なメソッドを行う。エラーが発生する
}
foreach文でlist型変数「hoges」の値を用いて反復処理を行っています。
しかし、「hoges」で取り出した値で反復処理を行っているにも関わらず、「hoges.Remove(hoge);」で「hoges」の値を削除しようとしています。
このようにforeachで参照中のオブジェクトに対して、無効な操作をしたためにエラーが発生します。
他にも空のスタックをポップすると「InvalidOperationException」エラーが発生したりします。
var stack = new Stack<string>();
System.Console.WriteLine(stack.Pop());//空のスタックに対して不正な操作をしたためエラー
「InvalidOperationException」のエラーは様々な要因が考えられます。
エラーの詳細をよく確認し、無効なメソッドの使い方をしていないか、注意深く確認しましょう。
「System.InvalidOperationException: 」の詳細はこちらから
C# コレクションが変更されました。列挙操作は実行されない可能性があります。エラーの解決方法
「System.InvalidOperationException: コレクションが変更されました。列挙操作は実行されない可能性があります。」のエラーを解決する方法をご紹介します。
①コピーコレクションを用意しそのオブジェクトのメソッドを呼び出す
var hoges = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
var hogesCopy = new List<int>(hoges);//コピーコレクションを用意してあげることでエラーを解決できます。
foreach (var hoge in hogesCopy )
{
hoges.Remove(hoge);
}
上記のようにオブジェクトを直接参照しないように、コピーコレクションを用意することでエラーを解消できます。
エラーを解決できなくて途方に暮れている人へ。
■無料プログラミング講座を開設しています!
下記にVisual Studioを使ったC#プログラミング初心者向け完全ガイドを掲載しています。
このガイドを一通り勉強すれば、C#プログラミングの基礎が学べます。
是非チャレンジしてみてください!
プログラミング初心者の方はぜひチャレンジしてみてください!!