Ant*_*nio 9 c# compiler-construction initialization local-variables default-value
如果你看下一个例子:
public void TestLocalValuesAssignment()
{
int valueVariable; // = default(int) suits fine
string refType; // null suits fine as well
try
{
valueVariable = 5;
refType = "test";
}
catch (Exception){}
Console.WriteLine("int value is {0}", valueVariable);
Console.WriteLine("String is {0}", refType);
}
Run Code Online (Sandbox Code Playgroud)
你可以很容易地看到,变量valueVariable和refType可能是他们在使用前未分配Console.WriteLine().编译器告诉我们有错误:
Error 1 Use of unassigned local variable 'valueVariable'
Error 2 Use of unassigned local variable 'refType'
Run Code Online (Sandbox Code Playgroud)
这是一个普遍的案例,并且有很多关于如何解决这个问题的答案(可能的修补程序已经评论过).
我无法理解的是为什么存在这种行为?这里的局部变量与类字段的不同之处在于,如果没有赋值,最后的变量会得到默认值(引用类型为null,值类型的对应默认值为空)?也许有一个例子或一个角落案例解释了为什么选择这样的编译器行为?
Mzf*_*Mzf 12
基本上 - 这就是MS决定的.
如果你想要更多,你可以在这里阅读并查看Eric Lippert的博客
这在C#中是非法的原因是因为使用未分配的本地很可能是一个bug.
C# 规范中对此进行了描述:
\n\n\n\n5.1.7 局部变量
\n\n由局部变量声明引入的局部变量不会自动初始化,因此没有默认值。出于明确赋值检查的目的,由局部变量声明引入的局部变量最初被视为未赋值。\n 局部变量声明可以包含局部变量初始化程序,在这种情况下,仅在初始化表达式 (\xc2\xa75.3.3.4) 之后才将变量视为明确分配。
\n\n在local-variable-declaration引入的局部变量的范围内 ,在其local-variable-declarator之前的文本位置引用该局部变量会产生编译时错误 。如果局部变量声明是隐式的 (\xc2\xa78.5.1),则在其local-variable-declarator中引用该变量也是错误的。
\n
| 归档时间: |
|
| 查看次数: |
1455 次 |
| 最近记录: |