2010-10-04 2 views
10

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

+2

Я не уверен в C#, но в Java world foreach construct - это просто синтаксический клей для обычного итератора ... Поэтому, если коллекция изменяется во время итерации, возникает ConcurrentModificationException. Похоже, что это именно так. –

ответ

15

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

Смежные вопросы