收集被修改,枚举可能不会继续

时间:2015-04-28 10:43:35

标签: c# c#-4.0 collections

我有以下代码

public bool Notify(bool filterStatus)
{
   foreach (IFilterStatusListener listener in listeners)
   {
      listener.Update(filterStatus);
   }
   return true;
}

方法Update递归调用子项的Notify

public void Update(bool status)
{
   this.isFilteredFixed = false;
   this.Notify(status);
   this.RaisePropertyChanged("IsFiltered");
}

当我运行此代码时,我得到以下错误 enter image description here

我该怎么办?

2 个答案:

答案 0 :(得分:3)

使用foreach语句迭代集合时,无法更改正在迭代的集合,因为迭代器会在实际位置丢失。

有几种解决方案:

  • 使用for循环进行迭代
  • 您可以创建正在迭代的集合的副本并对其进行处理。

答案 1 :(得分:1)

foreach期望收集保持不变。您可以尝试使用普通for循环。

请参阅MSDN

  

foreach 语句用于遍历集合以获取所需的信息,但不能用于在源集合中添加或删除项目以避免不可预测的副作用。如果您需要在源集合中添加或删除项目,请使用 for 循环。