none
Colección modificada; puede que no se ejecute la operación de enumeración. RRS feed

  • Pregunta

  • Buenos días.

    Estoy tratando de eliminar unos botones generados automáticamente de la siguiente forma:

    foreach (Control item in Compo.Controls.OfType<Button>())
                {
                    Compo.Controls.Remove(item);
                }

    Y me genera ese error. Me pueden indicar que es lo que esta mal o como se puede arreglar.

    Gracias

    martes, 27 de febrero de 2018 13:33

Respuestas

  • Es una limitación general de todos los bucles "foreach": desde dentro del bucle no se puede modificar la propia colección que el bucle está recorriendo en ese momento.

    Un remedio sencillo consiste en copiar la colección (por ejemplo con .ToiList), y recorrer la copia con el bucle pero borrar de la colección original en lugar de la copia que se está recorriendo:

    foreach (Control item in Compo.Controls.OfType<Button>().ToList())
     {
         Compo.Controls.Remove(item);
     }

    • Marcado como respuesta nelson111 martes, 27 de febrero de 2018 14:17
    martes, 27 de febrero de 2018 14:06
    Moderador

Todas las respuestas

  • Es una limitación general de todos los bucles "foreach": desde dentro del bucle no se puede modificar la propia colección que el bucle está recorriendo en ese momento.

    Un remedio sencillo consiste en copiar la colección (por ejemplo con .ToiList), y recorrer la copia con el bucle pero borrar de la colección original en lugar de la copia que se está recorriendo:

    foreach (Control item in Compo.Controls.OfType<Button>().ToList())
     {
         Compo.Controls.Remove(item);
     }

    • Marcado como respuesta nelson111 martes, 27 de febrero de 2018 14:17
    martes, 27 de febrero de 2018 14:06
    Moderador
  • Vale Alberto .. muchas gracias
    martes, 27 de febrero de 2018 14:17