Ответ 1
Сама коллекция должна ее обнаружить. В стандартных библиотечных коллекциях это достигается за счет внутреннего номера версии, который изменяется каждой операцией и проверяется итератором на каждой итерации (т.е. Каждый раз, когда вы вызываете MoveNext
), он проверяет, что номер версии такой же, как и когда был создан итератор).