当前位置: 代码迷 >> C# >> 局部变量作用域有关问题
  详细解决方案

局部变量作用域有关问题

热度:168   发布时间:2016-05-05 05:18:07.0
局部变量作用域问题?
看下面两个错误
1.

            for (int i = 0; i < 10; i++)
            {
                int a = 10;
            }
             a = 20;


error CS0103: 当前上下文中不存在名称“a”

2.

            for (int i = 0; i < 10; i++)
            {
                int a = 10;
                
            }
            int a = 20;

 error CS0136: 不能在此范围内声明名为“a”的局部变量,因为这样会使“a”具有不同的含义

既然1 里面 a已经不存在了. 为什么 在2 里面又不能定义?   这和c太不一样了. 不习惯.
------解决思路----------------------
因为C#是强类型的编程语言,不像C里面很多乱七八糟的用法都允许,而且会以你不知道的方式默认的来回转换,造成很多意想不到的问题
------解决思路----------------------
编码规范吧   为什么非要逆流而上       那你完全可以自己开发一门语言
------解决思路----------------------
乌龟垫桌子,规定嘛。。。
------解决思路----------------------
对于问题1
其实并不是a真的不存在,只不过是在for循环外部不允许访问它
------解决思路----------------------
{}是区分局部变量的作用域符号
可改为
for (int i = 0; i < 10; i++)
 {
                int a = 10;
                 
 }
{
            int a = 20;
}

------解决思路----------------------
C/C++可以,但是C#不可以。

由此看出,C#提高程序安全性的同时也增强了对语法的约束~

------解决思路----------------------
对于第二种情况也不太习惯,但是只需要改成
           int a;
           for (int i = 0; i < 10; i++)
            {
                a = 10;
            }
             a = 20;
类似的情况还有switch-case,好的习惯是在开头就声明变量
  相关解决方案