在下面的示例中,编译器生成错误“使用未分配的局部变量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
}
答案 0 :(得分:10)
只要检测到未分配变量的可能性,编译器就会生成该错误。由于for
循环的主体不能保证执行(例如for(int i = 123; i < 0; i++)
),因此不会无条件地分配变量,因此会生成编译器错误。
C#编译器不允许使用未初始化的变量。如果编译器检测到可能尚未初始化的变量的使用,则会生成编译器错误CS0165。有关更多信息,请参阅Fields (C# Programming Guide)。请注意,当编译器遇到可能导致使用未分配变量的构造时,即使您的特定代码没有,也会生成此错误。这避免了为明确赋值而过于复杂的规则的必要性。