7
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循环。

这是怎么回事?

4

6 回答 6

8

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);
        }
    }
}
于 2012-07-20T05:26:03.630 回答
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这是 a 的第一个选项embedded-statement。拥有另一个for循环embedded-statement是适用于iteration-statement(第 8.8 节)的选项之一。

于 2012-07-20T05:06:45.373 回答
3

第一个 for 循环 next 语句是第二个 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);
于 2012-07-20T05:26:14.570 回答
2

循环体可以包含不带大括号的for语句(例如循环、条件)。

于 2012-07-20T05:06:44.347 回答
2

for循环也是一个语句。所以它是合法的 C# 代码。控制流结构(至少是从 C 继承的)可以有一个语句或多个语句的块:

for (...) statement
for (...) { statement* }
于 2012-07-20T05:06:45.730 回答
2

将要迭代的语句括在花括号中。如果循环中只包含一条语句,则可以省略花括号。

即使语句的主体只包含一个语句,也应始终使用 if、for 或 while 语句的左大括号和右大括号。

大括号提高了代码的一致性和可读性。更重要的是,当向仅包含单个语句的主体插入附加语句时,很容易忘记添加大括号,因为缩进为结构提供了强有力的(但误导性的)指导。

for(int i = 0; i < 10; ++i) { Console.WriteLine(i) }

注意:循环之后。没有花括号,只有紧接在 for 循环语句之后的第一条语句会在循环中。

有关更多信息,请参见:http: //www.dotnetperls.com/omit-curly-brackets

于 2012-07-20T05:35:22.987 回答