变量的作用域问题

时间:2023-01-04 06:07:57

                        下面的代码是错误的(打印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#编译器可以检测变量作用域的问题。