首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

foreach循环里头的变量声明,不能覆盖外部的变量声明,为什么

2013-09-05 
foreach循环里面的变量声明,不能覆盖外部的变量声明,为什么?C#里面就连int这样的了类型都是CTL里面的Syste

foreach循环里面的变量声明,不能覆盖外部的变量声明,为什么?
C#里面就连int这样的了类型都是CTL里面的System.Int32类型,int有自己的方法:


            int i = 3;
            int[] ai = new int[] { 2, 3, 4 };
            foreach (int i in ai)//为什么这里用i不行呢? 既然是局部的变量,覆盖了全局的定义就是了
            {
                Console.WriteLine(i);
            }


那么我的问题是: 编译器知道foreach这里的i覆盖了外部的i的定义,为什么还要抱一个编译错误:

A local variable named 'i' cannot be declared in this scope because it
would give a different meaning to 'i', which is already used in a
'parent' or 'current' scope to denote something else.

C/C++/Java里面不同scope里面变量同名是可以的。C#不可以么? 还是仅仅对于for/foreach不可以?
[解决办法]
which is already used in a
'parent' or 'current' scope to denote something else.
编译器已经说的很详细了。parent也不行。
[解决办法]
int i = 3;
            int[] ai = new int[] { 2, 3, 4 };
            foreach (i in ai)//为什么这里用i不行呢? 既然是局部的变量,覆盖了全局的定义就是了
            {
                Console.WriteLine(i);
            }

在for里把int声明去掉是可以的,你这样子相当于重复声明,是通不过编译的
[解决办法]
错误1
不能在此范围内声明名为“i”的局部变量,因为这样会使“i”具有不同的含义,而它已在“父级或当前”范围中表示其他内容了



去问纺比尔盖次吧,他说是这么规定的
[解决办法]
更喜欢C#这样的定义不会混乱多清楚明白。
有一种情况下可以重复使用变量名:
foreach (int i in ai) Console.WriteLine(i);
foreach (int i in ai) Console.WriteLine(i);
因为i在循环内使用过后不再使用则下一个循环可以用同名。

热点排行