2012-05-18 47 views
0

我知道有一种方法可以使for循环像while循环一样工作。如何使`for`循环像'while`循环一样工作?

我有这样的代码工作:

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

我需要相当于这个while循环for ..

到目前为止,我有这样的:

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

为什么要这么做?为什么不使用这一边看自己? – Ramesh

+0

闻起来像功课。 – dwerner

+0

@dwerner不是作业,因为这是我最近的项目!实际上,我想将所有'while'循环传递给for循环 – Writwick

回答

4

每次使用Read方法之一,BinaryReader增加了它的位置,所以你实际上并不需要该部分中的任何东西。

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

更新:我刚刚意识到Position变量没有永远得到更新。您可以在for循环结尾或第三部分更新它。我更新了代码以更新for循环的第三部分中的Position

+0

谢谢,我只是在寻找这个! – Writwick

+0

这是5分钟内的答案! – Writwick

3

我不知道为什么你想这样做,但是这是你的for循环应该怎么看起来像

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

C#继承空语句表达式... – dwerner

+0

好答案! +1 – Writwick

0

伪代码,这两个环是相同的:

环路1:

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

循环2:

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

我想你可以从这里找出其余的。

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); 
}