オブジェクトを値として含むディクショナリを反復処理しようとしています。
foreach (KeyValuePair<int, CMapPool_Entry> Entry in MapPool)
{
this.SendConsoleMessage(Entry.Value.Map);
}
以下に、CMapPool_Entryのクラスを示します。
public class CMapPool_Entry
{
public string Map;
public string Mode;
public int Rounds;
public int Index;
public int Votes;
public bool Nominated;
public string Nominator;
public CMapPool_Entry(string map, string mode, int rounds, int index, string Nominator_LeaveEmptyStringIfNone)
{
this.Map = map;
this.Mode = mode;
this.Rounds = rounds;
this.Index = index;
// If Nominator isn't empty, set map to nominated
if (Nominator_LeaveEmptyStringIfNone != "")
{
this.Nominated = true;
this.Nominator = Nominator_LeaveEmptyStringIfNone;
}
}
public void AddVote()
{
this.Votes++;
}
public void RemoveVote()
{
if (this.Votes > 0)
this.Votes--;
}
}
ここでは、SendConsoleMessageメソッドも確認できます。
private void SendConsoleMessage(string message)
{
this.ExecuteCommand("procon.protected.pluginconsole.write", String.Format("{0}", message));
}
私にはそれが機能するように見えますが、foreach内のディクショナリから値を編集すると、「コレクションが変更されました。列挙操作が実行されない可能性があります。」というエラーが発生する方法について読みました。
しかし、なぜこのエラーが発生するのですか?私は値を編集していません、私はそれらを正しく読んでいますか?代わりにCObjectがstringまたはintの場合は正常に機能しますが、オブジェクトの場合は問題が発生します。私は何を間違っているのですか、私は何をすべきですか?
編集:さらにデバッグした後、Entry.Keyを使用しても問題がないことに気付きましたが、Entry.Valueをタッチするとすぐにエラーが発生します。何らかの理由で、2つの異なるエラーがランダムに発生しました。
- コレクションが変更されました。列挙操作が実行されない可能性があります。」
- 「指定されたキーが辞書にありませんでした。」
何か案は?または、オブジェクトを値として辞書を列挙するだけでは機能しませんか?