我不小心将
while
循环与 do while
循环组合起来创建了这个令人困惑的结构:
do while (false)
{
Console.WriteLine(1);
}
while (true);
这不会引发任何错误,但也不会向控制台写入任何内容。事实上,它似乎没有做任何事情。
将其与常规
do while
进行比较,它会无限期地将 1
打印到控制台:
do
{
Console.WriteLine(1);
}
while (true);
为什么第一个构造不会抛出错误?它在做什么?
我将稍微重新组织一下你的样本。希望这能让发生的事情变得更清楚。
do
while (false)
{
Console.WriteLine(1);
}
while (true);
你现在看到了吗?归结为:缺少代码块 (
{}
),do
语句之后的第一个语句将被解释为循环体。
在您的示例中,第一个语句是您意外声明的
while (false)
循环。由于内部循环现在是外部循环的主体,因此它会被重复 while (true)
- 也就是说,永远。
当然,由于
false
永远不会 true
,因此 Console.WriteLine(1);
行永远不会被执行。所以你的程序将无限循环,但它永远不会在控制台上打印任何内容。