2024年4月26日金曜日

C#InvalidOperationException: Collection was modified; enumeration operation may not execute.

C#のアレイリストやディグショナリ、ハッシュテーブルのフェッチ中にフェッチ対象を更新すると以下のエラーが発生します。

 >InvalidOperationException: Collection was modified; enumeration operation may not execute.

System.Collections.Generic.Dictionary`2+KeyCollection+Enumerator[TKey,TValue].MoveNext () (at 

解決方法

ディグショナリ.Keys.CopyToで文字列配列を使う

修正例

public void HenComMage()

{

//ディグショナリを一度文字配列にする od.hen=ディグショナリです

string[] henKey = new string[od.hen.Keys.Count];

string[] comKey= new string[od.henCom.Keys.Count];


od.henCom.Keys.CopyTo(comKey, 0);

od.hen.Keys.CopyTo(henKey, 0);

//フェッチを使わずにストリングを使う

//foreach (string key in od.henCom.Keys)

for(int i=0;i<comKey.Length;i++)

{

for (int j= 0; j < henKey.Length; j++)

{

if (henKey[j].Equals(comKey[i]))

{

od.henCom[henKey[j]] = od.hen[henKey[j]];//ディグショナリの値を更新

}

}

}

}