2010-01-10 9 views

Respuesta

19

Es un bucle sin valor o las condiciones de partida, por lo que irá para siempre, similar a

while (true) 
{ 
    // body... 
} 

Se necesitaría utilizar una declaración break; para salir del bucle.

+7

O una devolución. O una excepción (no es que debas hacer eso). –

+1

También es válido con todos los lenguajes C. –

+0

En C, sería así mientras (1) {....} – t0mm13b

5

Esto causaría un bucle infinito. Ver MSDN

0
while(true) { /* body */ } 
4

Repite el cuerpo para siempre.

Aquí es el desmontaje:

IL_0001: br.s  IL_0005 
IL_0003: nop   
IL_0004: nop   
IL_0005: ldc.i4.1  
IL_0006: stloc.0  
IL_0007: br.s  IL_0003 

LINQPad es una pequeña utilidad muy agradable que te permite explorar este tipo de preguntas. Ejecute linqpad, configure el menú desplegable de idiomas en "C# statement", coloque el fragmento de código, haga clic en ejecutar, haga clic en el botón "IL" que se encuentra sobre la ventana de resultados. Si no conoce el ensamblaje de IL, simplemente coloque el cursor sobre cada código de operación y una descripción emergente en inglés. Para este ejemplo específico, deberá hacer clic en detener para ver los botones de resultados, porque este ejemplo se repite para siempre.

+0

Gracias por el enlace de linqpad. Se ve * muy * genial. – Ben

12

Un bucle como este:

for (i = 0; i < 4; i++) { ... } 

es el mismo que:

i = 0; 
while (i < 4) { 
    ... 
    i++; 
} 

Por lo tanto, un bucle de esta manera:

for (;;) { ... } 

es una forma más corta para:

for (;true;) { ... } 

o sea que es lo mismo que:

; 
while (true) { 
    ... 
    ; 
} 

es decir, la inicialización y modificación son opcionales, y cuando se omite la condición, simplemente evalúa a true.

Cuestiones relacionadas