我知道这个例外已被解决了十亿次,但我的情况略有不同(我认为)。
无论如何,我使用ProtoBuf-Net来保存和加载对象。我有一个对象列表,我正在尝试反序列化,但它一直打破说(这里来了):
Collection was modified; enumeration operation may not execute.
再一次,我在这里问了50次这样的问题所以我很抱歉50次,但这里是代码:
public void Load(){
using (var file =
File.Exists(Application.StartupPath + @"\TestFile.scn") ?
File.OpenRead("TestFile.scn") :
null){
if (file != null){
this._tlpGrid.Controls.Clear();
this.Scenes = Serializer.Deserialize<List<GraphicsPanel>>(file);
foreach(GraphicsPanel gp in this._lgpScenes)
this.AddScene(gp);
}
}
}
为什么会抛出这个异常,如果我做错了,那么正确的方法是什么?
编辑:有人告诉我,AddScene方法正在修改列表。那是正确的: 原文: public void AddScene(GraphicsPanel Scene){
this._tlpGrid.Controls.Add(Scene);
this.Scenes.Add(Scene);
}
修改:
public void AddScene(GraphicsPanel Scene){
this._tlpGrid.Controls.Add(Scene);
if (!this.Scenes.Contains(Scene))
this.Scenes.Add(Scene);
}
非常感谢这个问题。
答案 0 :(得分:1)
显然问题是我调用修改列表的方法是在迭代它时修改列表。它应该是显而易见的,但我完全错过了它。谢谢你指出我,李。 抛出异常的方法的代码:
public void Load(){
using (var file =
File.Exists(Application.StartupPath + @"\TestFile.scn") ?
File.OpenRead("TestFile.scn") :
null){
if (file != null){
this._tlpGrid.Controls.Clear();
this.Scenes = Serializer.Deserialize<List<GraphicsPanel>>(file);
foreach(GraphicsPanel gp in this._lgpScenes)
this.AddScene(gp);
}
}
}
导致问题的方法(之前):
public void AddScene(GraphicsPanel Scene){
this._tlpGrid.Controls.Add(Scene);
this.Scenes.Add(Scene);
}
之后:
public void AddScene(GraphicsPanel Scene){
this._tlpGrid.Controls.Add(Scene);
if (!this.Scenes.Contains(Scene))
this.Scenes.Add(Scene);
}
再次感谢您耐心地指出了显而易见的事实。