没有括号的for循环的语法?

时间:2012-07-20 05:05:16

标签: c# syntax

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

这是怎么回事?

6 个答案:

答案 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。当你看到循环体周围的大括号是blockembedded-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循环语句之后的第一个语句才会在循环中。

有关详情,请参阅此处:http://www.dotnetperls.com/omit-curly-brackets