C#,什么行为会在一段时间内继续产生?

时间:2010-02-08 16:58:08

标签: c#

我有一个C#while循环,在这个循环中继续发出与移动到循环中的下一个项目相同的行为吗?与“for循环”完全相同。

例如,请参阅以下代码示例中的任何问题?

while ((line = file.ReadLine()) != null)
            {
                string messageDownloadID = line ;
                if (String.IsNullOrEmpty(messageDownloadID))
                {
                    continue;
                }
            }

提前致谢。

4 个答案:

答案 0 :(得分:8)

  

我有一个C#while循环,在这个循环中继续发出与移动到循环中的下一个项目相同的行为吗?与“for循环”完全相同。

不,continue没有移动到下一个项目的行为,除非移动到下一个项目的while块的一部分是循环条件的一部分或发生并在continue语句之前执行。 A continue将移动到循环的下一次迭代。 continue语句始终在最近的封闭whiledoforforeach语句中开始新的迭代。但是,如果在while循环中,i++continue语句之后发生,则不会执行。它与for循环不完全相同。

continue的语义是这样的:

while(condition) {
    statement
    continue
    statement
}

相当于

top:
while(condition) {
    statement
    goto top;
    statement
}

在这种情况下,如果执行continue,则永远不会执行continue之后的语句。但是,例如,这两个循环具有不同的语义:

for (int i = 0; i < 10; i++) {
    if (i == 5) {
        continue;
    }
    Console.WriteLine(i);
}

int j = 0;
while (j < 10) {
   if (j == 5) {
      continue;
   }
   Console.WriteLine(j);
   j++;

}

前一个循环将在控制台上打印09,而第二个循环将在控制台上打印04后进入无限循环。

  

例如,请参阅以下代码示例中的任何问题?

while ((line = file.ReadLine()) != null) { 
    string messageDownloadID = line;
    if (String.IsNullOrEmpty(messageDownloadID)) { 
        continue; 
    } 
}

嗯,这取决于。首先,除了将file中的文件指针移动到文件末尾之外,此循环没有做任何事情。现在,假设您打算在if语句之后发表声明

while ((line = file.ReadLine()) != null) { 
    string messageDownloadID = line;
    if (String.IsNullOrEmpty(messageDownloadID)) { 
        continue; 
    }
    ProcessMessageDownloadID(messageDownloadID);
}

然后你的代码没问题。这是因为移动到下一个项目的while部分是while条件的一部分(参见上面的粗体语句),因此将在循环的每次迭代中执行。您的代码是用于解析文件和跳过无法解析的项目的标准模式(因为它们是空白的)。

答案 1 :(得分:5)

是的,continue移动到循环的下一次迭代。

答案 2 :(得分:2)

是的,continue调用将重启循环。有点像在循环开始时转到标签。

答案 3 :(得分:1)

  

“当break,goto,return或throw语句在循环外传递控制时,可以终止while循环。要在不退出循环的情况下将控制传递给下一次迭代,请使用continue语句。”