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