局部变量作用域问题?

pro21ms4 2015-01-06 10:55:39
看下面两个错误
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太不一样了. 不习惯.
...全文
160 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
pro21ms4 2015-01-07
  • 打赏
  • 举报
回复
访问都不允许了. 还存在??? 只能说 对 人来说是不存在的, 对编译器是存在的.
腻害的小笼包 2015-01-07
  • 打赏
  • 举报
回复
在外面你定义的 a 会在整个方法里面作用,这样会和 for 循环里面的冲突
smthgdin_020 2015-01-06
  • 打赏
  • 举报
回复
1.{}中定义的变量只在{}中有效。 2.{}内外的变量名一样会有歧义,编译会报错。
我叫小菜菜 2015-01-06
  • 打赏
  • 举报
回复
对于强类型语言而言,1 在作用域以外使用变量,明显是错误的
我叫小菜菜 2015-01-06
  • 打赏
  • 举报
回复
C/C++可以,但是C#不可以。 由此看出,C#提高程序安全性的同时也增强了对语法的约束~
ghao0 2015-01-06
  • 打赏
  • 举报
回复
{}是区分局部变量的作用域符号 可改为 for (int i = 0; i < 10; i++) { int a = 10; } { int a = 20; }
於黾 2015-01-06
  • 打赏
  • 举报
回复
对于问题1 其实并不是a真的不存在,只不过是在for循环外部不允许访问它
willhuo 2015-01-06
  • 打赏
  • 举报
回复
乌龟垫桌子,规定嘛。。。
异常异长 2015-01-06
  • 打赏
  • 举报
回复
编码规范吧 为什么非要逆流而上 那你完全可以自己开发一门语言
於黾 2015-01-06
  • 打赏
  • 举报
回复
因为C#是强类型的编程语言,不像C里面很多乱七八糟的用法都允许,而且会以你不知道的方式默认的来回转换,造成很多意想不到的问题
  • 打赏
  • 举报
回复
引用 楼主 pro21ms4 的回复:
2.

            for (int i = 0; i < 10; i++)
            {
                int a = 10;
                
            }
            int a = 20;
error CS0136: 不能在此范围内声明名为“a”的局部变量,因为这样会使“a”具有不同的含义 既然1 里面 a已经不存在了. 为什么 在2 里面又不能定义? 这和c太不一样了. 不习惯.
谁跟你说“a已经不存在了”? 只不过c#不允许你访问而已。a仍然存在,直到整个方法结束才不存在了。
  • 打赏
  • 举报
回复
c# 仅仅是不允许在语句块内外有变量定义歧义,这并不会对c程序员造成什么大碍。
pro21ms4 2015-01-06
  • 打赏
  • 举报
回复
在作用域之后, 已经不能使用了, 还要占着位置, 有些不合理. 像 for(int i=0) 这样连续几个 for都没问题. 一个函数内几块代码都要用的变量 开始就定义了. 代码块内 的变量 随用随定义. 几个块之间不要有关联比较好.
dongdongdongJL 2015-01-06
  • 打赏
  • 举报
回复
这种问题何必纠结!避免明明重复就可以了! 没有人故意要命名相同,然后靠语法来规避问题吧!
於黾 2015-01-06
  • 打赏
  • 举报
回复
好的习惯就是局部变量和全局变量不要重名,否则可读性太差了
  • 打赏
  • 举报
回复
对于第二种情况也不太习惯,但是只需要改成 int a; for (int i = 0; i < 10; i++) { a = 10; } a = 20; 类似的情况还有switch-case,好的习惯是在开头就声明变量

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧