Как можно узнать, что итерационная коллекция была изменена?

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

Ответ 1

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