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

在下面的示例中,编译器生成错误“使用未分配的局部变量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 } 

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

从文档 :

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