2012-03-15 146 views
0

可能重复:
Variable declarations following if statements
Why this compile errorC#错误if语句

我收到错误“嵌入语句不能声明或标记语句”,因为我在没有括号的if语句后面有一个变量声明。无论如何,这是背景,这使我想到了这一点。

下面的代码是非法的

if (true) int i = 7; 

但是,如果包裹在括号中,它的所有法律。

if (true){ int i = 7;} 

这两段代码都没有用。然而第二个是确定的。这个行为的具体解释是什么?

回答

1

因为你声明一个变量意味着你正在创建一个语句。语句块必须放在括号{}中。在这里你可以阅读更多关于Statements

2

第一个版本没有表达语句,只是后面的声明,但如果需要一个语句来跟着它。

第二个版本有一个声明。一对{}括号已经是一个语句,即使它是空的(该声明不再被视为一个语句)。

1

这两段代码都没有用。

编译器不能检查有用,它只能检查确定的“联合国有用”:
如果您将在第二个使用该变量,可以将可能有意义。

但是,在第一个示例中,不能使用变量i,因为它已经超出了下一行的范围 - 您没有机会再添加一条使得该声明有用的行。

尽管如此,第二个应该会生成一个警告,如“变量i已分配,但其值永远不会被使用”。

0

以非常通用的方式解释:这是因为括号中的编译器“假设”它使用了。

如果没有括号,则可以使用初始化后的变量。在括号内,相反,可以。

看到极好的Skeet回答我的问题和Eric Lippert的评论也。

1

未包含在括号内的嵌入式语句不能是声明语句或带标签的语句。有关更多详细信息,请访问http://msdn.microsoft.com/en-us/library/ms173143.aspx

除此之外,如果您声明了变量并且在此之后,条件结束并且变量作用域结束。所以编译器会给出错误是有道理的。如果使用{},编译器将假定您将在'{'和'}'之间使用此变量。