2010-05-14 6 views
7

Récemment, dans un livre, j'ai lu ce code. Pouvez-vous définir les moyens de ce code et comment ce code fonctionne.Comment cette boucle fonctionne dans C#

int i = 0; 
for (; i != 10;) 
{ 
    Console.WriteLine(i); 
    i++; 
} 
+0

Intéressant, pas vu ça avant ... – Yoda

+0

@Yoda - Probablement parce que sa mauvaise forme. Légal, mais mauvaise forme. –

+0

Surpris vous n'avez pas de critiques pour cette question. +1 pour revenir aux bases. –

Répondre

13

Il boucle.

Étant donné que vous avez déjà défini i=0 ci-dessus, ils ont omis cette section de la boucle for. En outre, puisque vous incrémentez la variable à la fin, ils l'ont également omis.

Ils ont simplement tourné une boucle for dans une boucle while.

Il serait probablement plus élégante que:

int i = 0; 
while(i != 10) 
{ 
    Console.WriteLine(i); 
    i++; 
} 
+2

en plus d'initialiser i en dehors de la boucle pour lui donner une plus grande portée, cela permet également à l'incrémenteur d'être effectué sur une condition dans la boucle, par ex. i + = 2 ou i-- ou quelque chose, sans avoir à compenser pour ce qui a été spécifié dans la troisième partie de la boucle for. Mais oui, même comme un temps, je pense que – Jacob

+0

@Jacob, +1 pour la capture de la portée, je ne pensais même pas à ce sujet. –

1

S'il est plus facile de voir sous forme normale, il est presque l'équivalent de ceci:

for (int i = 0; i != 10; i++) 
{ 
    Console.WriteLine(i); 
} 

À l'exception qu'il laisse i disponible pour l'utilisateur une fois la boucle terminée, il n'est pas limité à la boucle for.

1

Il est le même que cette boucle:

for (int i = 0; i != 10; i++) { 
    Console.WriteLine(i); 
} 

Sauf, la i variable est déclarée en dehors de la boucle, il est donc la portée est plus grande.

Dans une boucle for, le premier paramètre est l'initialisation, le second est la condition et le troisième est l'incrément (qui peut être à peu près tout). Le livre montre comment l'initalisation et l'incrément sont déplacés à l'endroit du code où ils sont réellement exécutés. La boucle peut aussi montrer que la boucle while équivalente:

int i = 0; 
while (i != 10) { 
    Console.WriteLine(i); 
    i++; 
} 

Voici également déclaré la i variable en dehors de la boucle, de sorte que la portée est plus grande.

1

Vous utilisez « pour », comme un « tout »

1

Ce code pourrait être réécrite, (dans le contexte de l'extrait de code - il est équivalent comme indiqué.) Que:

for (int i = 0; i != 10; i++) 
    Console.WriteLine(i); 

Fondamentalement, l'expression d'initialisation et l'expression d'incrémentation ont été retirées de l'expression de boucle for, qui sont purement facultatives.

+0

Je noterais que ce que vous avez posté n'est pas * équivalent *, il y a une différence de portée. –

+0

Merci @Nick, édité selon votre suggestion. –

0

Il est le même que:

for (int i = 0; i != 10; i++) { 
    Console.WriteLine(i); 
} 

S'il vous plaît ne pas écrire du code comme ça. Il est juste moche et vainc le but de for-loops.

2

L'instruction for est défini dans le C# spec comme

pour (pour-initialiseur; à condition; pour-itérateur) -déclaration incorporé

Tous les trois de pour-initialiseur, pour-condition, un d pour l'itérateur sont optionnels. Le code fonctionne parce que ces pièces ne sont pas nécessaires.

Pour les curieux: si pour condition est supprimée, la boucle se comporte comme s'il y avait un pour condition qui a produit vrai. Ainsi, il agirait comme boucle infinie, ce qui nécessite une instruction de saut à quitter (pause, goto, jet ou retour).

0

Comme int i a été déclaré en haut de sorte qu'il n'était pas dans la boucle for. cela est tout à fait comme

for(int i = 0; i!=10; i++) 
{ 
    /// do your code 
} 
Questions connexes