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?
10
A
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
- 1. NHibernate: la colección se modificó; la operación de enumeración no se puede ejecutar
- 2. colección se modificó, la operación de enumeración no podrá ejecutar
- 3. Se modificó la colección C#; la operación de enumeración no puede ejecutar
- 4. Extraño "La colección se modificó después de que se haya creado la instancia del enumerador" excepción
- 5. Se modificó la colección Entity framework; la operación de enumeración no se puede ejecutar
- 6. ¿Por qué me aparece "La colección se modificó, la operación de enumeración no se puede ejecutar" cuando no se modifica la colección enumerada?
- 7. Se modificó Entity Framework Collection; la operación de enumeración no se puede ejecutar
- 8. Práctica recomendada para evitar InvalidOperationException: ¿Se modificó la recopilación?
- 9. ¿Foreach puede lanzar InvalidCastException?
- 10. ¡Fallas de Visual Studio! - La colección se modificó después de que se creó una instancia del enumerador.
- 11. La colección se modificó; la operación de enumeración no podrá ejecutar en ArrayList
- 12. cómo usar la colección de listas para "foreach" en SSIS
- 13. Python, comprensión de la lista iterada
- 14. ¿Cómo puedo saber si una propiedad es una colección genérica?
- 15. Eliminar el nodo principal y los nodos hijo seleccionados: se modificó la recopilación; operación de enumeración no puede ejecutarse
- 16. ¿Cómo se puede ejecutar el objetivo CMake si se modificó el archivo especificado?
- 17. ¿Cómo sé si se modificó la instancia del modelo django?
- 18. ¿Cómo se puede saber si el iPhone se bloquea?
- 19. Foreach sobre una colección de IEnumerables
- 20. ¿Cómo se puede saber si dos comodines se superponen?
- 21. ¿Está garantizado que la declaración foreach de .NET itere una colección en el mismo orden en el que se creó?
- 22. SQL Server 2000: ¿Hay alguna forma de saber cuándo se modificó por última vez un registro?
- 23. ¿Cómo obtengo la hora en que se modificó por última vez un archivo en Python?
- 24. svn: ¿Cómo determino la última vez que se modificó una determinada línea?
- 25. cómo puede iterar elemento foreach en QListWidget
- 26. Comprobar cuándo se modificó por última vez la contraseña
- 27. Android: No se puede saber cómo usar setImeActionLabel
- 28. Cómo hacer que foreach() y ggplot2 se lleven bien
- 29. ¿Cómo se puede saber si una transmisión está cerrada?
- 30. ¿Cómo puede saber mi programa si Delphi se está ejecutando?
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í. –