Foreach问题:集合被修改枚举操作可能无法执行

时间:2014-09-08 09:23:03

标签: c# data-binding

我遇到此代码的问题。基本上ProfileControl是自定义控件,profileListListBoxprofileCollectionObservableCollection

foreach (ProfileControl item in profileList.SelectedItems) 
{
     profileCollection.Remove(item);
}

代码工作正常,但我收到了消息:

  

集合被修改枚举操作可能无法执行。

请告诉我,谢谢。

2 个答案:

答案 0 :(得分:1)

我相信profileList必然会profileCollection。因此,当您致电profileCollection.Remove时,数据绑定引擎会更新profileList.SelectedItems集合以保持同步。

foreach无法可靠地处理迭代时正在修改的集合。您可以制作profileList.SelectedItems的副本并对其进行迭代。

var selectedItems = profileList.SelectedItems
                               .Cast<ProfileControl>()
                               .ToList();
foreach (ProfileControl item in selectedItems) 
{
     profileCollection.Remove(item);
}

答案 1 :(得分:0)

解决方案是将其转换为List:

foreach (ProfileControl item in profileList.SelectedItems.ToList()) 

实际上,您正在删除当前正在浏览的列表中的项目...