如果你看下一个例子:

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);
}

您可以很容易地看到,变量valueVariablerefType可以在其在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。

07-24 14:06