【发布时间】:2011-12-20 23:55:01
【问题描述】:
我已经使用 C# 很长时间了,但从未意识到以下几点:
public static void Main()
{
for (int i = 0; i < 5; i++)
{
}
int i = 4; //cannot declare as 'i' is declared in child scope
int A = i; //cannot assign as 'i' does not exist in this context
}
那么为什么我不能在 for 块之外使用 'i' 的值,如果它不允许我用这个名称声明一个变量呢?
我认为for循环使用的迭代器变量仅在其范围内有效。
【问题讨论】:
-
因为外部块作用域包括for循环的作用域
-
我认为的一种方式(一些代码风格指南要求这样做,尤其是对于动态类型语言)是在一个范围内声明的所有变量都可以在该范围的开头声明,这意味着你的函数可以重写
int i, A; for(int i = 0; i < 5; i++){ } i=4; A=i -
@V4Vendetta:反之亦然。内部块是父块的黑盒子。
-
除了不可能的技术原因之外,为什么这(或它的变体)永远是明智之举?!它显然有不同的用途,所以给它一个不同的名字。
-
我完全没有意识到这一点,但这似乎是一个完全愚蠢的限制。