另一个论坛上出现了一个问题,我知道如何解决它,但它揭示了我特有的编译器功能。该人收到错误“嵌入式语句不能是声明或标记语句”,因为他们在 if 语句后面有一个变量声明,没有括号。这不是他们的意图,但他们注释掉了紧跟在 if 语句之后的代码行,这使得变量声明成为要执行的事实上的代码行。无论如何,这就是背景,这让我想到了这一点。
下面的代码是非法的
if (true)
int i = 7;
但是,如果将其括在括号中,则一切都是合法的。
if (true)
{
int i = 7;
}
这两段代码都没有用。不过第二个还可以。这种行为的具体解释是什么?
The C#语言规范 http://download.microsoft.com/download/3/8/8/388e7205-bc10-4226-b2a8-75351c669b09/CSharp%20Language%20Specification.doc区分三种类型的语句(更多详细信息请参见第 8 章)。一般来说,您可以有以下陈述:
-
标记语句- 我猜这是给老式的
goto
陈述
-
声明-声明- 这将是一个变量声明
-
嵌入语句- 几乎包括所有剩余的语句
In the if
声明身体必须是嵌入语句,这解释了为什么第一个版本的代码不起作用。这是语法if
根据规范(第 8.7.1 节):
if ( 布尔表达式 ) 嵌入语句
if ( 布尔表达式 ) 嵌入语句 else 嵌入语句
变量声明是声明-声明,所以它不能出现在体内。如果将声明括在方括号中,您将得到一个语句块,它是一个嵌入语句(所以它可以出现在那个位置)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)