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

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

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

```cpp
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`\.

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

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

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

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

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

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

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