如果你看下一个例子:
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'
这是一个很普遍的案例,关于如何修复它(可能的修复被评论)。
我不明白为什么会有这样的行为?这里的局部变量与类字段有什么不同?在类字段中,如果没有赋值,最后一个变量将获得默认值(引用类型为空,值类型为相应的默认值)?也许有一个例子或一个角落的情况,解释了为什么选择这样的编译器行为?
最佳答案
基本上-这就是微软的决定。
如果您想要更多,可以阅读here并检查Eric Lippert’s Blog
这在c_中是非法的,因为使用未分配的局部函数很可能是一个bug。