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

use*_*020 -1 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            
}
Run Code Online (Sandbox Code Playgroud)

AGB*_*AGB 10

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

文档:

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