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不可以?

解决方案 »

  1.   

    which is already used in a
    'parent' or 'current' scope to denote something else.
    编译器已经说的很详细了。parent也不行。
      

  2.   

    int i = 3;
                int[] ai = new int[] { 2, 3, 4 };
                foreach (i in ai)//为什么这里用i不行呢? 既然是局部的变量,覆盖了全局的定义就是了
                {
                    Console.WriteLine(i);
                }在for里把int声明去掉是可以的,你这样子相当于重复声明,是通不过编译的
      

  3.   

    更喜欢C#这样的定义不会混乱多清楚明白。
    有一种情况下可以重复使用变量名:
    foreach (int i in ai) Console.WriteLine(i);
    foreach (int i in ai) Console.WriteLine(i);
    因为i在循环内使用过后不再使用则下一个循环可以用同名。