C#使用if语句进行变量声明时出错

本文关键字:变量 声明 出错 使用 if 语句 | 更新日期: 2023-09-27 18:27:56

可能重复:
if语句后面的变量声明
为什么这个编译错误

我得到错误"嵌入式语句不能是声明或标记语句",因为我在if语句后面有一个变量的声明,没有括号。不管怎样,这就是背景,这让我想到了这一点。

以下代码是非法的

if (true) int i = 7;

然而,如果你把它放在括号里,那就完全合法了。

if (true){ int i = 7;}

这两段代码都没有用处。然而,第二个是可以的。对这种行为的具体解释是什么?

C#使用if语句进行变量声明时出错

第一个版本没有表达式语句,只有if后面的声明,但if后面需要一个语句。

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

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

这两段代码都没有用处。

编译器不能检查有用性,只能检查确定的"无用性":
如果您在第二个变量中使用该变量,则可能有意义。

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

然而,第二个应该生成一个警告,如"变量i已分配,但其值从未使用。"

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

除此之外,如果您声明变量,然后if条件结束,那么变量范围结束。所以编译器会给出一个错误是有道理的。如果使用{},编译器将假定您将在的"{"answers"}"之间使用此变量

以非常通用的方式解释:这是因为在括号中间编译器"假定"它使用了。

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

请参阅Skeet对我的问题的精彩回答,以及Eric Lippert的评论。