Roy*_*mir 59 c# compiler-errors
我看到了这种奇怪的行为,我想知道是否有合理的解释:
当我(通过偶然)在函数的局部变量中添加额外的/额外的分号时,例如:
public void MyMethod ()
{
int a = 1;;
Console.WriteLine(a); //dummy
}
Run Code Online (Sandbox Code Playgroud)
它确实编译但它表明它是多余的.
但当我用字段(也是偶然)做到这一点时,我得到一个错误(编译):
题
这个领域的限制是否有任何理由?
Nb我已经知道不允许var
使用字段的其他限制性事项.但这里有些不同.
Tho*_*que 83
;
alone是一个语句(空语句),但只允许在类的主体中声明语句; 其他类型的语句只能出现在方法体中.
Sel*_*enç 26
;
本身是一个空洞的陈述.在类范围内,只允许声明语句.类体定义在C# Specification 5.0, §10.1.6 Class Body
class-body:
{ class-member-declarations }
Run Code Online (Sandbox Code Playgroud)
例如,您无法在单独的语句中初始化字段:
class Foo
{
int x = 2; // this is allowed
x = 5; // this is not
}
Run Code Online (Sandbox Code Playgroud)
因此,您只能声明字段和其他成员,但不能在类体中使用其他语句.
它不是局部变量声明的一部分,如Thomas所示,它本身就是一个声明.
这是有效的:
public void MyMethod ()
{
;;;
int a = 1;
;
Console.WriteLine(a); //dummy
;;
}
Run Code Online (Sandbox Code Playgroud)
分句声明的想法是允许这样的结构:
while(mycondition) ;
Run Code Online (Sandbox Code Playgroud)
允许它进入课堂体内是没有意义的,它没有带来额外的价值.
TLDR; 这与变量/字段声明无关
您可能也想看一下这个线程:什么时候在C#中使用没有语句的作用域?
它有点类似,但不完全,它会帮助你理解为什么
int a = 1;;;
已验证.
归档时间: |
|
查看次数: |
2656 次 |
最近记录: |