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不可以?
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不可以?
'parent' or 'current' scope to denote something else.
编译器已经说的很详细了。parent也不行。
int[] ai = new int[] { 2, 3, 4 };
foreach (i in ai)//为什么这里用i不行呢? 既然是局部的变量,覆盖了全局的定义就是了
{
Console.WriteLine(i);
}在for里把int声明去掉是可以的,你这样子相当于重复声明,是通不过编译的
有一种情况下可以重复使用变量名:
foreach (int i in ai) Console.WriteLine(i);
foreach (int i in ai) Console.WriteLine(i);
因为i在循环内使用过后不再使用则下一个循环可以用同名。