¿Cómo se puede salir de un bucle foreach mientras se está dentro de un bloque de conmutadores?Salir de un bucle foreach desde dentro de un bloque de conmutadores
Normalmente, se utiliza descanso, pero si se utiliza un descanso dentro de un bloque de interruptores que sólo te va a salir de un bloque de interruptores y el bucle foreach continuará la ejecución:
foreach (var v in myCollection)
{
switch (v.id)
{
case 1:
if (true)
{
break;
}
break;
case 2;
break
}
}
Lo que estoy haciendo actualmente cuando necesito salir del foreach
mientras estoy dentro del bloque switch
estableciendo un valor bool
colocado fuera del lazo en verdadero y comprobando el valor de este bool cada vez que se ingresa el foreach
y antes de ingresar al bloque de interruptores. Algo como esto:
bool exitLoop;
foreach (var v in myCollection)
{
if (exitLoop) break;
switch (v.id)
{
case 1:
if (true)
{
exitLoop = true;
break;
}
break;
case 2;
break
}
}
Esto funciona, pero no dejo de pensar que debe haber una mejor manera de hacer esto soy consciente de ...
EDIT: Me pregunto por qué esto no se implementó en .NET la realidad forma ordenada funciona en PHP según lo mencionado por @jon_darkstar?
$i = 0;
while (++$i) {
switch ($i) {
case 5:
echo "At 5<br />\n";
break 1; /* Exit only the switch. */
case 10:
echo "At 10; quitting<br />\n";
break 2; /* Exit the switch and the while. */
default:
break;
}
}
No estoy seguro de si existe una manera mejor, pero sería similar a tener que salir de un bucle externo mientras se está dentro del bucle interno. Hasta el momento, no he encontrado de todos modos para hacer eso y, por lo tanto, el uso de un valor de bandera parece ser la única manera. –
Posible duplicado de [Salto de un ciclo while que contiene una instrucción switch] (http://stackoverflow.com/questions/1987379/break-out-of-a-while-loop-that-contains-a-switch- declaración) – ruffin