下面的代码是错误的(打印test出现错误)
static void Main(string[] args) { int i; string test; for (i = 1; i < 10; i++) { Console.WriteLine(i); test = "123"; } Console.WriteLine("i----"+i); Console.WriteLine(test); Console.ReadKey(); }
需要进行下面的修改:
static void Main(string[] args) { int i; string test=""; for (i = 1; i < 10; i++) { Console.WriteLine(i); test = "123"; } Console.WriteLine("i----"+i); Console.WriteLine(test); Console.ReadKey(); }
原因:
涉及到分配给 test 变量的内存空间,只声明一个简单的变量类型,并不会引起其他的变化,只有在变量赋值后,这个值才占用一块内存空间。如果这种占据内存空间的行为在循环中发生,改值实际上定义为一个局部值,在循环的外部会超出了其作用域。
即使变量本身没有局部化到循环上,循环所包含的值也局部化到该循环上。但是在循环外部赋值可以确保改值是主体代码的局部值,在循环内部它仍然处于其作用域中。这意味着变量在退出主体代码块之前没有超出作用域,可以在循环外部访问它的值。
C#编译器可以检测变量作用域的问题。