2012-05-18 4 views
0

Je sais qu'il existe un moyen de faire fonctionner une boucle for comme une boucle while.Comment faire fonctionner une boucle `for` comme une boucle while?

je fonctionner, ce code:

while (BR.BaseStream.Position < BR.BaseStream.Length) // BR = BinaryReader 
{ 
    int BlockLength = BR.ReadInt32(); 
    byte[] Content = BR.ReadBytes(BlockLength); 
} 

J'ai besoin for équivalent pour cette boucle while ..

So Far, j'ai ceci:

for (long Position = BR.BaseStream.Position; Position < BR.BaseStream.Length; //Don't Know This) 
{ 
    int BlockLength = BR.ReadInt32(); 
    byte[] Content = BR.ReadBytes(BlockLength); 
} 
+0

Pourquoi voudriez-vous faire cela? pourquoi ne pas utiliser le tout se regarder? – Ramesh

+0

Ça sent le devoir. – dwerner

+0

@dwerner Pas un devoir car c'est mon récent projet! En fait, je veux transférer toutes les boucles 'while' à' for' boucles – Writwick

Répondre

4

Chaque fois que vous utilisez l'une des méthodes de lecture, le BinaryReader incrémente sa position, de sorte que vous n'avez besoin de rien dans cette section.

for (long Position = BR.BaseStream.Position; Position < BR.BaseStream.Length; Position = BR.BaseStream.Position) 
{ 
    int BlockLength = BR.ReadInt32(); 
    byte[] Content = BR.ReadBytes(BlockLength); 
} 

Mise à jour: Je viens de réaliser que la variable Position ne jamais se mis à jour. Vous pouvez le mettre à jour à la fin de la boucle for ou dans la troisième section. J'ai mis à jour le code pour mettre à jour Position dans la troisième section de la boucle for.

+0

Merci, je cherchais juste cela !! – Writwick

+0

Ceci est la réponse en 5 minutes! – Writwick

3

Je ne sais pas pourquoi vous voulez le faire, mais c'est comment votre boucle devrait ressembler à

int i = 0; 
for (; true;) 
{ 
    Console.WriteLine(i); 
    if(++i==10) 
     break; 
} 
+0

C# hérite de l'expression de l'instruction null ... – dwerner

+0

Bonne réponse! +1 – Writwick

0

En pseudocode, ces deux boucles sont équivalentes:

boucle 1:

Type t = initialiser; 
while (t.MeetsCondition()) 
{ 
    // Do whatever 
    t.GetNextValue(); 
} 

boucle 2:

for (Type t = initialiser; t.MeetsCondition(); t.GetNextValue()) 
    // Do whatever 

Je pense que vous pouvez travailler le reste à partir d'ici.

0
for (long Position = BR.BaseStream.Position; Position < BR.BaseStream.Length; /* If you Don't Know  This, dont specify this. It is Optionl and can be kept blank */) 
{ 
    int BlockLength = BR.ReadInt32(); 
    byte[] Content = BR.ReadBytes(BlockLength); 
} 
Questions connexes