即使我分配变量,“使用未分配的局部变量”错误?

时间:2016-06-04 23:56:10

标签: c# compiler-errors

在下面的示例中,编译器生成错误“使用未分配的局部变量r”,即使我在使用它之前在循环中分配变量。为什么编译器会生成此错误?

static void Main(string[] args)
{
    float r;

    for (int i = 0; i < 100; i++)
        r = i; // assigned here

    Console.WriteLine(r); // error: use of unassigned local variable            
}

1 个答案:

答案 0 :(得分:10)

只要检测到未分配变量的可能性,编译器就会生成该错误。由于for循环的主体不能保证执行(例如for(int i = 123; i < 0; i++)),因此不会无条件地分配变量,因此会生成编译器错误。

来自documentation

  

C#编译器不允许使用未初始化的变量。如果编译器检测到可能尚未初始化的变量的使用,则会生成编译器错误CS0165。有关更多信息,请参阅Fields (C# Programming Guide)。请注意,当编译器遇到可能导致使用未分配变量的构造时,即使您的特定代码没有,也会生成此错误。这避免了为明确赋值而过于复杂的规则的必要性。