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

JL.*_*JL. 0 c#

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

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

while ((line = file.ReadLine()) != null)
            {
                string messageDownloadID = line ;
                if (String.IsNullOrEmpty(messageDownloadID))
                {
                    continue;
                }
            }
Run Code Online (Sandbox Code Playgroud)

提前致谢.

jas*_*son 8

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

不,a continue没有移动到下一个项目的行为,除非移动到下一个项目的while块的一部分是循环条件的一部分或发生并在continue语句之前执行.A continue将移动到循环的下一次迭代.该continue声明总是从最近的封闭一个新的迭代while,do,forforeach语句.但是,如果在while循环中,比如说,i++continue语句之后发生它将不会被执行.它与for循环不完全相同.

语义continue如下:

while(condition) {
    statement
    continue
    statement
}
Run Code Online (Sandbox Code Playgroud)

相当于

top:
while(condition) {
    statement
    goto top;
    statement
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,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++;
Run Code Online (Sandbox Code Playgroud)

}

前者循环将打印0通过9在控制台上,而第二个将打印后进入死循环0,通过4在控制台上.

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

while ((line = file.ReadLine()) != null) { 
    string messageDownloadID = line;
    if (String.IsNullOrEmpty(messageDownloadID)) { 
        continue; 
    } 
}
Run Code Online (Sandbox Code Playgroud)

这得看情况.首先,除了将文件指针移动到文件file末尾之外,这个循环没有做任何事情.现在,假设你的意思是在声明之后有if这样的陈述

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

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


Ada*_*son 5

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