2015-04-28 2 views
0

У меня есть код нижеКоллекция была изменена, перечисление не может продолжать

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

Вы пытаетесь обновить свою коллекцию во время ее итерации. Читайте: http://stackoverflow.com/questions/604831/collection-was-modified-enumeration-operation-may-not-execute –

+0

Что здесь «слушатели»? –

+0

Объекты пользовательского типа, которые реализуют 'IFilterStatusListener' – SimpleGuy

ответ

1

foreach ожидает, что коллекция остается неизменной. Вместо этого вы можете попробовать обычный цикл for.

См MSDN:

Еогеаспа оператора используются для итерации по коллекции, чтобы получить информацию, которую вы хотите, но не может быть использована для добавления или удаления элементов из исходной коллекции, чтобы избежать непредсказуемый побочные эффекты. Если вам нужно добавить или удалить элементы из исходной коллекции, используйте для цикла.

+0

, пытающиеся использовать цикл' for' .... – SimpleGuy

+0

Спасибо! Это сработало – SimpleGuy

3

Когда вы итерируете коллекцию с помощью инструкции foreach, вы не можете изменить коллекцию, в которой вы выполняете итерацию, потому что итератор теряется, на каком месте оно на самом деле.

Есть несколько решений этой:

  • Вы итерацию с петлей для
  • Вы создаете копию коллекции вы итерации, и работать над этим.
Смежные вопросы