【问题标题】:C# Error in variable declaration using if statement [duplicate]C# 使用 if 语句声明变量时出错 [重复]
【发布时间】:2012-03-15 07:43:14
【问题描述】:

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

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

以下代码不合法​​

if (true) int i = 7;

但是,如果你把它放在括号里,那就是合法的。

if (true){ int i = 7;}

这两段代码都没有用。不过第二个还行。这种行为的具体解释是什么?

【问题讨论】:

    标签: c#


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      因为您正在声明一个变量,所以您正在创建一个语句。语句块必须用方括号 {} 括起来。在这里你可以阅读更多关于Statements

      【讨论】:

        【解决方案3】:

        这两段代码都没有用。

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

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

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

        【讨论】:

          【解决方案4】:

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

          除此之外,如果你声明了变量,然后如果条件结束,那么变量范围就结束了。所以编译器会给出错误是有道理的。如果您改用 {},编译器将假定您将在 '{' 和 '}' 之间的某个位置使用此变量

          【讨论】:

            【解决方案5】:

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

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

            查看关于我的问题的出色Skeet 答案以及 Eric Lippert 评论。

            【讨论】:

              猜你喜欢
              • 2014-08-26
              • 2015-06-29
              • 1970-01-01
              • 1970-01-01
              • 2013-05-27
              • 2014-03-08
              • 1970-01-01
              • 2017-10-25
              • 2021-03-04
              相关资源
              最近更新 更多