# V3221. Modifying a collection during its enumeration will lead to an exception.

Анализатор обнаружил, что коллекция модифицируется во время итерации по ней. Это может привести к возникновению исключения `InvalidOperationException`.

Рассмотрим пример:

    public void AppendMissingNames(List<string> currentNames,
                                   List<string> otherNames)
    {
      foreach(string name in currentNames)
      {
        if (!otherNames.Contains(name))
        {
          currentNames.Add(name);
        }
      }
    }

В теле `foreach` вызывается метод `Add` для коллекции `currentNames`. Итерирование происходит по этой же коллекции. Модификация `currentNames` приведёт к возникновению исключения `InvalidOperationException`.

Исправленный код может выглядеть следующим образом:

    public void AppendMissingNames(List<string> currentNames,
                                   List<string> otherNames)
    {
      foreach(string name in currentNames)
      {
        if (!otherNames.Contains(name))
        {
          otherNames.Add(name);
        }
      }
    }

Вместо `currentNames` отсутствующие имена должны добавляться в `otherNames`. В данном случае коллекция, по которой происходит итерирование, не модифицируется.

Рассмотрим пример итерирования по коллекции с помощью метода `ForEach`:

    collection.ForEach(name => { collection.Add(name); });

Ошибка эквивалентна предыдущей: модифицируется коллекция, по которой происходит итерирование. Для исправления изменим коллекцию, в которую будут добавляться элементы:

    collection.ForEach(name => { collectionForAppend.Add(name); });