Как может foreach знать, что итеративная коллекция была изменена? - PullRequest
10 голосов
/ 04 октября 2010

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

1 Ответ

15 голосов
/ 04 октября 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...