for (int y = 0; y < GameBoard.GameBoardHeight; y++)
for (int x = 0; x < GameBoard.GameBoardWidth; x++)
{
if (GetSquare(x, y) == "Empty")
{
RandomPiece(x, y);
}
}
第一个for循环没有大括号,下一行甚至不是带;
的语句。它只是一个for
循环。
这是怎么回事?
答案 0 :(得分:7)
MSDN:for循环重复执行语句或语句块,直到指定的表达式求值为false。
要理解的要点是执行语句或语句块部分。您示例中的嵌套for
是一个语句,由于{ }
对,它包含一个语句块。
因此,如果您将上述内容编写为每个嵌套操作只有一个语句,那么您将编写:
for (int y = 0; y < GameBoard.GameBoardHeight; y++)
for (int x = 0; x < GameBoard.GameBoardWidth; x++)
if (GetSquare(x, y) == "Empty")
RandomPiece(x, y);
或每个嵌套操作的块语句:
for (int y = 0; y < GameBoard.GameBoardHeight; y++)
{
for (int x = 0; x < GameBoard.GameBoardWidth; x++)
{
if (GetSquare(x, y) == "Empty")
{
RandomPiece(x, y);
}
}
}
答案 1 :(得分:4)
没有大括号的for
循环的主体只是下一个语句。在这种情况下,第二个for
循环是第一个循环体的语句。
C#4.0规范中的语法(第8.和8.8.3节)如下所示:
for-statement:
for ( for-initializer; for-condition; for-iterator) embedded-statement
embedded-statement:
block
empty-statement
expression-statement
selection-statement
iteration-statement
jump-statement
try-statement
checked-statement
unchecked-statement
lock-statement
using-statement
yield-statement
因此for
循环的主体被定义为embedded-statement
。当你看到循环体周围的大括号是block
时embedded-statement
的第一个选项。将另一个for
循环作为embedded-statement
是适用于iteration-statement
的选项之一(第8.8节)。
答案 2 :(得分:3)
首先是循环下一个语句是循环的第二个,所以你的程序也能很好地处理你的语法,即使你也写这样的语法:
for (int y = 0; y < GameBoard.GameBoardHeight; y++)
for (int x = 0; x < GameBoard.GameBoardWidth; x++)
if (GetSquare(x, y) == "Empty")
RandomPiece(x, y);
答案 3 :(得分:2)
for
循环体可以包含没有括号的语句(例如循环,条件)。
答案 4 :(得分:2)
for
循环也是一个声明。所以它是合法的C#代码。控制流构造(至少从C继承的构造)可以有单个语句或几个语句的块:
for (...) statement
for (...) { statement* }
答案 5 :(得分:2)
将要在花括号中迭代的语句包含在内。如果循环中只包含一个语句,则可以省略花括号。
即使语句的正文只包含一个语句,也应始终使用if,for或while语句的开括号和结束括号。
大括号可提高代码的一致性和可读性。更重要的是,当在仅包含单个语句的主体中插入附加语句时,很容易忘记添加大括号,因为缩进会给结构提供强大(但误导性)的指导。
for(int i = 0; i < 10; ++i) { Console.WriteLine(i) }
注意:循环后。如果没有花括号,只有紧跟在for循环语句之后的第一个语句才会在循环中。