2015-07-20 13 views
5

Anscheinend kann man eine Do ... Loop -Loop ohne Bedingung erstellen. Der folgende Code kompiliert mit .NET 4.5 (fiddle) sowie mit Roslyn (fiddle):Wo ist Do ... Loop ohne eine dokumentierte Bedingung?

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

jedoch die Grammatik auf der documentation page bietet nur die folgenden zwei Möglichkeiten:

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 

Ist das ein Fehler im Compiler, ein Fehler in der Dokumentation oder habe ich einfach nicht hart genug gesucht?

+0

Es kompiliert sogar mit .NET 4.6 – greenhoorn

+1

Sieht aus wie ein Dokumentationsfehler. Jemand sollte es MS melden. – dbasnett

+3

@dbasnett - Ich habe mich entschieden, "jemand" zu sein und habe es gemeldet. Ich weiß nicht, ob es noch jemand hat. –

Antwort

9

Im Zweifelsfall konsultieren Sie die language specification, anstatt die Referenz:

10.9.1 While ... End While und Do ... Loop-Anweisungen

A While oder Do Schleife Anweisungsschleifen basierend auf einem booleschen Ausdruck. ... Ein Ausdruck kann hinter dem Schlüsselwort Do oder nach dem Schlüsselwort Loop platziert werden, aber nicht nach . ... It ist auch gültig, um überhaupt keinen Ausdruck anzugeben;

(Mein Schwerpunkt)

Die Sprachreferenz versucht, einfacher zu sein, aber wesentliche Details verlieren. Die Sprachspezifikation sollte mit dem übereinstimmen, was der Compiler implementiert.

-3

anzeigen Teile Abschnitt weiter unten in der Dokumentation:

Zustand Optional. Boolean Ausdruck. Wenn Bedingung ist Nichts, Visual Basic behandelt es als False.

+0

Dokumentation: _ "** While **: Erforderlich, es sei denn, Bis wird verwendet. [...] ** Bis **: Erforderlich, außer While wird verwendet" _. OP ist kurios, warum ein 'Do ... Loop' ohne While ODER Bis ist gültig.Die NBF ist nicht 'Do [{While | Bis} Bedingung] '. – CodeCaster

+0

@CodeCaster OK, Was bedeutet "Optional" in der Dokumentation? Kann ein Fehler in "Erforderlich ..." für While/Until, nicht in "Optional" sein? –

1

ich glaube, der Schlüsselsatz in der Dokumentation

ist Entweder Während oder Bis verwenden können Bedingung angeben, aber nicht beide.

Also, wenn Sie eine Bedingung angeben möchten, müssen Sie entweder. Ohne eine Bedingung müssen Sie nichts angeben.

Das Verlassen der Bedingung ist absolut gültig und führt zu einer Endlosschleife.