看下面两个错误
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,好的习惯是在开头就声明变量