【发布时间】:2014-02-08 05:15:45
【问题描述】:
如果你看下一个例子:
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);
}
您可以很容易地看到,变量valueVariable 和refType 在Console.WriteLine() 中使用之前可能会被取消分配。编译器通过错误告诉我们:
Error 1 Use of unassigned local variable 'valueVariable'
Error 2 Use of unassigned local variable 'refType'
这是一个普遍的案例,有 loads of answers 关于如何解决这个问题(可能的修复已评论)。
我不明白为什么会存在这种行为? 这里的局部变量与类字段有何不同,最后一个变量在未分配的情况下获得默认值(引用类型为 null,值类型为对应的默认值)?也许有一个例子或一个极端案例来解释为什么选择这种编译器行为?
【问题讨论】:
-
这不是“行为”,而是规则。明确赋值规则规定变量必须在使用前被赋值。显然,当引发异常时,它不会出现在您的代码 sn-p 中。是的,有可能发生。
-
@TimSchmelter 完全同意,这是重复的。 John Skeet provided 相当合理的解释,可以视为对我问题的回答。
标签: c# compiler-construction initialization default-value local-variables