我有一个C#while循环,在这个循环中继续发出与移动到循环中的下一个项目相同的行为吗?与“for循环”完全相同。
例如,请参阅以下代码示例中的任何问题?
while ((line = file.ReadLine()) != null)
{
string messageDownloadID = line ;
if (String.IsNullOrEmpty(messageDownloadID))
{
continue;
}
}
提前致谢。
答案 0 :(得分:8)
我有一个C#while循环,在这个循环中继续发出与移动到循环中的下一个项目相同的行为吗?与“for循环”完全相同。
不,continue
没有移动到下一个项目的行为,除非移动到下一个项目的while
块的一部分是循环条件的一部分或发生并在continue
语句之前执行。 A continue
将移动到循环的下一次迭代。 continue
语句始终在最近的封闭while
,do
,for
或foreach
语句中开始新的迭代。但是,如果在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++;
}
前一个循环将在控制台上打印0
到9
,而第二个循环将在控制台上打印0
到4
后进入无限循环。
例如,请参阅以下代码示例中的任何问题?
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语句。”