0

在 c# 中,您可以在不使用大括号的情况下定义 if 语句,例如此示例

  if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
                this.Exit();

这里 this.Exit(); 是与 if 关联的语句。但它不在大括号中,所以我的问题是,它与 if 有什么关系?

我了解到编译器会忽略空格,在这种情况下这在逻辑上没有意义。答案仅仅是IDE找到缩进并在编译时自动将其放在大括号中吗?

4

8 回答 8

3

;结束声明。

语句(C# 编程指南)

语句可以由以分号结尾的单行代码组成,也可以由 块中的一系列单行语句组成。语句块括在 {}括号 中,并且可以包含嵌套块。

于 2012-07-17T10:45:57.340 回答
3

当您的代码被编译器解析时,它会将每个部分分成一个词法块。“if”语句的语法是:

if ( Expression ) Statement else Statement

或者

if ( Expression ) Statement

语句可以是语句块(即用大括号括起来)或单个语句。在您的代码中,this.Exit()调用与 if 块相关联,因为表达式已关闭并且'this.Exit()' 符合语句的语法。

http://ecma-international.org/ecma-262/5.1/

于 2012-07-17T10:48:16.810 回答
1

C# 和 Java 中的大括号基本上是使多个语句成为一个块集,基本上可以理解为特定情况下的范围。

  • 您可以将 1 个或多个语句放在花括号中,或者将该区域留空,无论您是否有一些评论。

  • 默认情况下,编译器会查找代码中编写的每个字符,因此它会逐个字符地查找,当它看到打开时,{它期望必须有一个关闭}。如果它找到更多的左大括号,它会继续计算代码块。

  • 如果之后没有打开{if/else/foreach/for/do/while则编译器将任何立即语句视为其块的一部分,如果由 a 终止;

  • if/else/foreach/for/do/while如果你立即放一个,你甚至可以在你之后没有声明;

我有我的发现,可能很多人已经知道或使用它,所以凭借这个问题我提出......

  • 块可以有多种用途{ }。在所有循环、if-else语句中,甚至在switch-case您可以使用大括号将代码放入作用域中。对我来说,将案例语句放在块中真的很有帮助。如果您在一种情况下定义了一个变量,那么您不能在另一种情况下在同一开关下使用相同的名称定义它......所以我使用这种语法:

            int abc = 1;
            switch (abc)
            {
                case 1:
                    {
                        var x = 11;
                    }
                    break;
                case 2:
                    {
                        var x = 11; // its legal. 
                    }
                    break;
                case 3:
                    var x = 11; // its ilegal here too.. because we already have it in previous scope. 
    
                    break;
                case 4:
                    {
                        var x = 11; // its illegal here because we already have a in the parent/current scope. 
                    }
                    break;
            }
    
  • 您还可以使用相同的想法声明变量:

            ... some code above
    
            {
                var xx = 10;
            }
    
            // xx - is not available as it was declared in the inner-scope
    
            {
                var xx = 11; // Its legal, because its declared in inner-scope.
            }
    
            // xx - is again not available as it was declared in the inner-scope
    
            ... some code below 
    

概括:

  • 如果后面没有左大括号{if/else/foreach/for/do/while则下一个立即语句被认为是 if/else/foreach/for/do/while块的一部分。
  • 您可以在顺序语句中创建尽可能多的范围以使用相同的变量名。
于 2012-07-17T11:35:33.210 回答
0

它只适用于一行,所以如果你想要一个多行的 if 语句,你应该使用大括号。

所以,编译器知道,有一个没有大括号的 if 语句它应该在下一行使用(假设条件为真)。

于 2012-07-17T10:44:04.780 回答
0

不,大括号用于多行语句。所以空格和缩进是无关紧要的。您可以在 if 语句所在的同一行调用 this.Exit() ,这仍然可以。为了可读性,有些人仍然更喜欢用大括号表示单行语句,这是一个选择问题。

于 2012-07-17T10:44:17.510 回答
0

对于 if 中的单个 Line 语句,不需要将语句放在大括号中。

如果您需要执行多个语句,则需要大括号。

于 2012-07-17T10:44:18.353 回答
0

在 C# 中,if 语句基于括号运行命令,就像我们使用带括号的 if 一样。如果没有给出括号,则如果语句为真,它将运行下一个命令,然后运行之后的命令。如果条件为假,则继续执行下一个命令。

于 2012-07-17T10:48:14.153 回答
0

“ ;” 指向语句的结尾/终止点。因此,当编译器首先发现它时,它会将其包含在 IF 块中,而不是将其他包含在 IF 子句中。

于 2012-07-17T11:06:13.363 回答