C# 集合被修改为异常

C# 集合被修改为异常,c#,linq,entity-framework,C#,Linq,Entity Framework,我试图从DataContext对象查询名为“Nations”的数据表,并在调用SubmitChanges()时收到以下异常: 收集被修改;枚举操作不能执行 下面是代码片段: foreach (Nation thisNation in NationList) { Nation nation = nationDB.Nations.Where(c => c.ID == thisNation.ID).First(); nation.Duplicate(thisNation); }

我试图从
DataContext
对象查询名为“Nations”的数据表,并在调用
SubmitChanges()
时收到以下异常:

收集被修改;枚举操作不能执行

下面是代码片段:

foreach (Nation thisNation in NationList)
{
    Nation nation = nationDB.Nations.Where(c => c.ID == thisNation.ID).First();
    nation.Duplicate(thisNation);
}
其中
Duplicate()
是一种复制
Nation
对象的某些属性的方法:

我用的是EF和CTP5


我做错了什么?

虽然这里没有直接说明,但问题通常是您使用的是
foreach
,它只能枚举项,不允许您直接操作集合。当Linq参与进来时,这种方法可能会变得有点暴躁


你可以用一个简单的
for
循环来代替你现有的,这个循环应该可以解决这个问题-但是,如果你不解决这个问题,这确实会带来另一个潜在的问题:你需要管理当前的索引,这个索引会被
for
自动递增/递减,以免你会遇到“x下的问题”

虽然此处不明显,但问题通常是您使用的是
foreach
,它只能枚举项,不允许您直接操作集合。当Linq参与进来时,这种方法可能会变得有点暴躁

你可以用一个简单的
for
循环来代替你现有的,这个循环应该可以解决这个问题-但是,如果你不解决这个问题,这确实会带来另一个潜在的问题:你需要管理当前的索引,这个索引会被
for
自动递增/递减,以免你会遇到“x下的问题”

这是“修改的闭包”恶魔。尝试这样做:

foreach (Nation thisNation in NationList)
{
    var tempNation = thisNation;
    Nation nation = nationDB.Nations.Where(c => c.ID == tempNation.ID).First();
    nation.Duplicate(tempNation);
}
更多信息的好帖子。

这是“修改的闭包”恶魔。尝试这样做:

foreach (Nation thisNation in NationList)
{
    var tempNation = thisNation;
    Nation nation = nationDB.Nations.Where(c => c.ID == tempNation.ID).First();
    nation.Duplicate(tempNation);
}

好文章,提供了更多信息。

我看不出这会有什么效果,因为“每个闭包”只使用一次(先调用实现查询)。我看不出这会有什么效果,因为“每个闭包”只使用一次(先调用实现查询)。只要看一看,这应该会起作用,你能把剪掉的代码扩展一点,包括
Duplicate()
SaveChanges()
的实现吗?只要看一下,这应该行得通,你能把剪掉的代码扩展一点,包括
Duplicate()
SaveChanges()的实现吗
?即使我尝试使用您的方法和AJ方法,我仍然会遇到这个问题…您说问题发生在
SaveChanges
上,这里的代码片段没有显示正在修改的集合-好的,我们可以看到更多的代码吗?类国家有字段:int-ID、字符串名称、列表区域。复制方法是逐个复制每个字段。我通过将值从nationList复制到集合来修改nationDB.Nations集合。这应该会影响数据库,对吧?即使是更简单的语法,比如nation.name=“test”在foreach循环中,当我调用SubmitChange时抛出异常我仍然遇到这个问题,即使我尝试使用您的和AJ方法…您说问题发生在
SaveChanges
上,这里的代码片段没有显示正在修改的集合-好的,我们可以看到更多的代码吗?类Nation有字段:int ID,字符串名称,列出区域。复制方法是逐个复制每个字段。我通过将值从nationList复制到集合来修改nationDB.Nations集合。这应该会影响数据库,对吗?即使是更简单的语法,比如foreach循环中的nation.name=“test”,在调用SubmitChanges时也会引发异常