日期:2014-05-17  浏览次数:21001 次

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”具有不同的含义,而它已在“父级或当前”范围中表示其他内容了