[英]About c# if-else syntax
在C#中,您可以不使用花括号就定义一个if语句,例如本例
if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
this.Exit();
这是this.Exit(); 是与if相关联的语句。 但这不是大括号,所以我的问题是,它与if有何关系?
我了解到编译器会忽略空白,在这种情况下,这在逻辑上是没有意义的。 答案是否仅仅是IDE找到缩进并在编译时自动将其放在花括号中?
当编译器解析您的代码时,它将每个部分分成一个词法块。 'if'语句的语法为:
if ( Expression ) Statement else Statement
要么
if ( Expression ) Statement
语句可以是语句块(即用大括号括起来)或单个语句。 在您的代码中,由于表达式已关闭并且'this.Exit()
'符合语句的语法,因此, is.Exit()
调用与if块相关联。
C#和Java中的花括号基本上使多个语句成为一个块集,基本上可以将其理解为特定情况下的作用域。
您可以将1个或多个语句括在花括号中,也可以将该区域留空,无论其中是否有注释。
默认情况下,编译器会查找代码中写入的每个字符,因此它逐个字符移动,并且在看到打开{
时,它预计必须有一个结束符}
。 如果找到更多的开括号,它将继续计数代码块。
如果在if/else/foreach/for/do/while
之后没有打开{
if/else/foreach/for/do/while
那么编译器会将任何立即语句视为由其终止的立即语句作为其块的一部分;
如果您立即输入;
if/else/foreach/for/do/while
则在if/else/foreach/for/do/while
之后甚至都没有语句;
我的发现是,可能已经有很多人知道或使用了,所以凭借这个问题,我提出了...
{ }
块可以有多种用途。 在所有循环中, if-else
语句,甚至在switch-case
都可以使用花括号将代码放入作用域中。 对我来说,将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
下一个立即执行语句被视为if/else/foreach/for/do/while
块的一部分。 它仅适用于一行,因此,如果要让if语句包含多行,则应使用花括号。
因此,编译器知道,有一个if语句不带花括号,它应该在下一行使用(假设条件为真)。
不,大括号用于多行语句。 因此,空格和缩进无关紧要。 您可以在if语句的同一行上调用this.Exit(),这仍然可以。 有些人仍然更喜欢在单行语句中使用大括号以提高可读性,这是一个选择问题。
对于if中的单个Line语句,无需将语句放在大括号中。
如果需要执行多个语句,则需要大括号。
在C#中,if语句基于括号运行命令,就像我们使用带括号的if一样。 如果没有括号,则在语句为true时运行下一条命令,然后在其后运行命令。 如果条件为假,则继续执行下一个命令。
“;”指向语句结尾/终止点。 因此,当编译器首先找到它时,它将其包含在IF块中,而不将其包含在IF子句中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.