2010-12-09 8 views
2

In C# habe ich eine seltsame und komplexe Logik in den Headern von Schleifen gesehen.Was ist in der Kopfzeile einer for-Schleife erlaubt?

Was ist/ist im Header einer for-Schleife nicht möglich? Ist es möglich, mehr als einen Inkrementor/Variable zu haben?

Dank

+6

haben Sie die Sprachdefinition betrachten zu lesen? –

Antwort

8

Ist es möglich, mehr als ein Inkrementierer/Variable zu haben?

Ja, es ist möglich. Das heißt, das ist vollkommen legal:

// reverse b into a 
for (int i = 0, j = n - 1; i < n; i++, j--) { 
    a[i] = b[j] 
} 

Was ist/ist nicht möglich, in dem Header einer for Schleife?

Das ist genau das, was die Grammatik Ihnen sagen wird. Hier ist die Grammatik für eine for Anweisung in C#:

for-statement: 
    for(for-initializer_opt; for-condition_opt; for-iterator_opt) 
     embedded-statement 
for-initializer: 
    local-variable-declaration 
    statement-expression-list 
for-condition: 
    boolean-expression 
for-iterator: 
    statement-expression-list 
statement-expression-list: 
    statement-expression 
    statement-expression-list, statement-expression 

Beachten Sie, dass sowohl die for-initializer und die for-iterator erlauben Verbindung Aussagen über statement-expression-list. Weitere Einzelheiten finden Sie in §8.8.3 der language specification. Sie werden wahrscheinlich auch in Abschnitt 8.5.1 der Spezifikation nachsehen wollen, was genau local-variable-declaration beinhaltet (Hinweis: int i = 0, j = n - 1, k = 42 ist legal, aber int i = 0, j = n - 1, long k = 42 ist nicht).

+0

Solange alle Elemente einen Typ haben, können Sie eine Menge von Deklarationen und Initialisierungen durchführen. –

Verwandte Themen