在c#中,您可以在不使用大括号的情况下定义if语句,例如此示例
if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
this.Exit();
这里是this.Exit();是与if相关的语句。但它不是括号,所以我的问题是,它是如何与if相关联的?
我了解到编译器忽略了空格,在这种情况下逻辑上没有意义。答案只是IDE找到缩进并在编译时自动将其置于括号中吗?
答案 0 :(得分:3)
答案 1 :(得分:3)
当编译器解析您的代码时,它会将每个部分分解为词法块。 'if'语句的语法是:
if ( Expression ) Statement else Statement
或
if ( Expression ) Statement
语句可以是语句块(即括在括号中)或单个语句。在您的代码中,由于表达式已被关闭且is.Exit()
'符合语句的语法,因此'this.Exit()
调用与if块相关联。
答案 2 :(得分:1)
C#和Java中的大括号基本上是将多个语句作为一个块集,基本上理解为特定情况下的作用域。
您可以在花括号中放置一个或多个语句,或者将该区域留空,无论您是否只有一些注释。
默认情况下,编译器会搜索代码中写入的每个字符,因此它会按字符串char显示,当它看到打开{
时,它会发现必须有一个结束}
。如果它找到更多的开口括号,它会继续计算代码块。
如果在{
之后没有开放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
块的一部分。答案 3 :(得分:0)
它只适用于一行,所以如果你想要一个包含多行的if语句,你应该使用大括号。
所以,编译器知道,就是有一个没有大括号的if语句应该使用(假设条件为真)下一行。
答案 4 :(得分:0)
不,大括号用于多行语句。所以白色空间和缩进是无关紧要的。你可以在与if语句相同的行上调用this.Exit(),这样就可以了。为了便于阅读,有些人仍然更喜欢单行语句的大括号,这是一个选择问题。
答案 5 :(得分:0)
对于if中的单个Line语句,不需要在括号中放置语句。
如果您需要执行多个语句,则需要大括号。
答案 6 :(得分:0)
在C#中,if语句运行基于括号的命令,因为我们使用括号。如果没有给出括号,如果该语句为true则运行下一个命令,然后运行命令。如果条件为假,则继续执行下一个命令。
答案 7 :(得分:0)
“;”指向陈述/终止点的结尾。因此,当编译器首先发现它时,它将它包含在IF块中,而不包括在IF子句中的其他内容。