2015-07-20 27 views
5

Apparentemente, è possibile creare un Do ... Loop -Loop senza condizioni. Il seguente codice viene compilato con .NET 4.5 (fiddle), così come con Roslyn (fiddle):Dove si svolge Do ... Loop senza una condizione documentata?

Public Sub Main() 
    Do 
     Console.WriteLine("Hello World") 
     Exit Do 
    Loop 
End Sub 

Tuttavia, la grammatica sulla documentation page offre solo le seguenti due opzioni:

Do { While | Until } condition 
    [ statements ] 
    [ Continue Do ] 
    [ statements ] 
    [ Exit Do ] 
    [ statements ] 
Loop 
-or- 
Do 
    [ statements ] 
    [ Continue Do ] 
    [ statements ] 
    [ Exit Do ] 
    [ statements ] 
Loop { While | Until } condition 

E` un bug nel compilatore, un bug nella documentazione o semplicemente non ho visto abbastanza?

+0

Si compila anche con .NET 4.6 – greenhoorn

+1

Sembra un bug di documentazione. Qualcuno dovrebbe segnalarlo alla SM. – dbasnett

+3

@dbasnett - Ho deciso di essere "qualcuno" e l'ho segnalato. Non so se anche qualcun altro. –

risposta

9

In caso di dubbio, consultare il language specification, piuttosto che il riferimento:

10.9.1 Mentre ... End While e Do ... istruzioni di ciclo

Un While o Do ciclo cicli di istruzione basati su un'espressione booleana. ... Un'espressione può essere inserita dopo la parola chiave Do o dopo la parola chiave Loop, ma non dopo . ... È valido anche per specificare nessuna espressione;

(mia enfasi)

La guida al linguaggio cerca di essere più semplice, ma può perdere dettagli essenziali. Le specifiche del linguaggio dovrebbero corrispondere a ciò che implementa il compilatore.

-3

Vedi le parti sezione di seguito nella documentazione:

condizione opzionale. Espressione booleana. Se condizione è Niente, Visual Basic considera False.

+0

Documentazione: _ "** While **: obbligatorio a meno che non venga utilizzato. [...] ** Fino a **: Obbligatorio a meno che non venga utilizzato While" _. OP è curioso perché un 'Do ... Loop' senza While OR Until è valido.L'NBF non è 'Do [{While | Fino alla condizione} '. – CodeCaster

+0

@CodeCaster OK, cosa significa "Opzionale" nella documentazione? Può essere, un errore in "Richiesto ..." per While/Until, non in "Opzionale"? –

1

penso che la frase chiave nella documentazione è

È possibile utilizzare uno o Mentre Fino a specificare condizioni, ma non entrambi.

Quindi, se si desidera specificare una condizione, è necessario utilizzare entrambi. Senza una condizione non devi specificare nulla.

Lasciando fuori la condizione è perfettamente valido e si tradurrà in un ciclo infinito.