2010-10-04 19 views
10

Cuando modifiqué la colección que estaba iterando con foreach, obtuve una excepción. Así que estoy curioso acerca de cómo foreach (o el tiempo de ejecución) detectar eso. ¿Es posible hacerlo con un objeto general?¿Cómo puede foreach saber que se modificó la colección iterada?

+2

No estoy seguro acerca de C#, pero en el mundo Java la construcción foreach es solo un pegamento sintáctico para el iterador normal ... Por lo tanto, si la colección se modifica durante la iteración, se lanza ConcurrentModificationException. Parece que este es exactamente el caso aquí. –

Respuesta

15

La colección en sí tiene que detectarlo. En las colecciones de la biblioteca estándar, esto se consigue teniendo un número de versión interno modificado por cada operación y comprobado por el iterador en cada iteración (es decir, cada vez que llame al MoveNext comprueba que el número de versión sea el mismo que cuando el iterador fue creado).

Cuestiones relacionadas