我无意中将一个while
循环与另一个do while
循环结合在一起,从而创建了这个令人困惑的结构:
do while (false)
{
Console.WriteLine(1);
}
while (true);
这不会抛出任何错误,但也不会向控制台写入任何内容。事实上,它似乎什么也没做。
将其与这个常规的进行比较do while
,它会1
无限期地打印到控制台:
do
{
Console.WriteLine(1);
}
while (true);
为什么第一个构造没有抛出错误?它在做什么?
4
最佳答案
2
我将稍微重新整理一下您的样本。希望这能让您更清楚地了解正在发生的事情。
do
while (false)
{
Console.WriteLine(1);
}
while (true);
现在你明白了吗?归根结底是这样的:如果没有代码块({}
),语句之后的第一个语句do
将被解释为循环体。
在您的示例中,第一个语句是while (false)
您意外声明的循环。由于内部循环现在是外部循环的主体,因此它会被重复while (true)
– 也就是说,永远重复。
当然,由于false
是 never true
,所以该行Console.WriteLine(1);
永远不会被执行。因此您的程序将永远循环,但它永远不会在控制台上打印任何内容。
|
第一个构造不会抛出错误,因为这是有效代码并且可以编译。它只是没有在逻辑上执行任何操作。
do while(false)
将立即退出执行块,因此它不会打印任何内容。
|
Console.WriteLine
无法访问。警告是编译器表示“您编写的内容可以编译,但可能无法按预期执行”的方式。您应该学会注意警告,尤其是当如此少量的代码产生警告时。–
if(...) { }
,并且像你一样难以阅读和理解代码。然而,糟糕的格式又增加了一些混乱。–
–
–
|