使用if语句的变量声明中的C#错误

时间:2012-03-15 07:43:14

标签: c#

  

可能重复:
  Variable declarations following if statements
  Why this compile error

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

以下代码是非法的

if (true) int i = 7;

但是,如果你用括号括起来,那就完全合法了。

if (true){ int i = 7;}

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

5 个答案:

答案 0 :(得分:2)

第一个版本没有表达式语句,只是在if之后的声明,但是如果需要声明则遵循它。

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

答案 1 :(得分:1)

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

的更多信息

答案 2 :(得分:1)

  

这两段代码都没用。

编译器无法检查是否有用,它只能检查明确的“无用”:
如果您在第二个中使用该变量,则可能有意义。

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

尽管如此,第二个应该生成一个警告,例如“已分配变量i但从未使用过它的值。”

答案 3 :(得分:1)

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

除此之外,如果你声明变量,那么如果条件结束,那么变量范围结束。所以编译器会给出错误是有意义的。如果你改用{},编译器将假设你要在'{'和'}'之间的某个地方使用这个变量

答案 4 :(得分:0)

以非常通用的方式解释:它是在括号编译器中间的原因“推测”它使用的。

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

我的问题上查看优秀Skeet答案,Eric Lippert也发表评论。