Это полностью зависит от реализации.Это даже не правда, что добавление или удаление элементов должно сделать недействительным перечислитель.Это зависит от реализации итератора (и, возможно, от деталей базовой коллекции), чтобы определить, какие типы изменений в базовой коллекции больше не позволяют продолжать ее перечисление, и какие изменения могут все еще позволить итератору продолжать работу.
Некоторые реализации используют самый простой вариант и говорят, что любое изменение в коллекции делает недействительным перечислитель (многие из коллекций .NET реализованы таким образом), другие могут продолжать итерациюпоследовательность независимо от каких-либо изменений в основной коллекции вообще.Некоторые находятся между ними.
Если вы хотите знать, как поведет себя данная последовательность, если вы измените коллекцию, на которой она основана, вам нужно будет просмотреть документацию для этой коллекции или все, что сгенерировалопоследовательность для этого.Если вы создаете свою собственную коллекцию и / или итератор для коллекции, то вы сами решаете, какие типы изменений больше не имеют смысла, чтобы какие-либо существующие итераторы продолжали обработку или стоило ли это вашего времени (и связанного с этимзатраты на производительность) для поддержки некоторых / всех изменений в базовой коллекции, сохраняя при этом разумное поведение для последовательностей, которые повторяются.