2010-10-04 7 views
10

Lorsque j'ai modifié la collection que je parcourais avec foreach, j'ai reçu une exception. Donc, je suis juste curieux de savoir comment foreach (ou le runtime) détecter cela. Est-il possible de le faire avec un objet général?Comment savoir si la collection itérée a été modifiée?

+2

Je ne suis pas sûr de C#, mais dans Java world foreach construct est juste une colle syntaxique à l'itérateur normal ... Donc si la collection est modifiée pendant l'itération, ConcurrentModificationException est levée. Il semble que c'est exactement le cas ici. –

Répondre

15

La collection elle-même doit le détecter. Dans les collections de bibliothèques standard, un numéro de version interne est modifié par chaque opération et vérifié par l'itérateur à chaque itération (c'est-à-dire que chaque fois que vous appelez MoveNext, il vérifie que le numéro de version est le même l'itérateur a été créé).

Questions connexes