C#foreach变量作用域
这个问题在这里已经有了答案:
为什么不是第一个gridView变量只能在foreach循环范围内访问?
它是,但编译器(语言定义)只是禁止重叠范围。
产生相同错误的简化版本:
{ // outer block, scope for the second `i`
for(int i = 0; i < 10; i++) // nested 'i', the first we see
{
// scope of first `i`
}
int i = 3; // declaration of a second `i`, not allowed
}
这很难读取get的原因是第二个'i'只能在其声明后使用,但其范围是整个外部块。
请参阅C#语言规范,第3.7节:范围
您提到要阅读的文章在这里并不重要,因为您没有关闭循环变量。
会发生什么是你在封闭范围内有一个相同名字的变量。 这是不允许的(至少对于以方法开始的范围)。 如果您尝试在for
循环中声明gridView
或只是嵌套块,则会出现同样的问题。
尽管如此,你可以使用相同的变量名相邻的两个循环,因为它们不重叠。 还要注意的是,变量作用域是由块决定的,即使只有在声明后才可以访问它们。 这意味着即使您的foreach
循环在声明第二个gridView
变量之前,它们的作用域也会重叠。