C#:在for循环的初始化部分中声明的变量范围的定义?

Ava*_*vra 5 c# scope

可能重复:
与c#C#Variable Scoping中的范围混淆

我很好奇在for-loops(etc)的初始化部分中声明的变量范围背后的设计考虑因素.这些变量似乎既不在范围内,也不在范围之内,或者我错过了什么?为什么这个以及何时需要?即:

for (int i = 0; i < 10; i++)
{
}

i = 12;       //CS0103: The name 'i' does not exist in the current context

int i = 13;   //CS0136: 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 'child' scope to denote something else
Run Code Online (Sandbox Code Playgroud)

Chr*_*ris 3

循环变量的作用域为循环本身。这就是为什么您会看到 i 在循环之外不可用的预期结果。

您无法在循环之外声明 i 的事实有点令人费解,但与以下事实有关:编译后,所有变量声明都可以被视为位于声明它们的块的开头。这就是您的代码实际上与以下相同:

int i;

for (int i = 0; i < 10; i++)
{
}

i = 13; 
Run Code Online (Sandbox Code Playgroud)

希望这里很明显您有名称冲突。至于为什么会这样,我不能肯定地告诉你。我不太了解编译器在幕后所做的事情,但希望其他人会出现并解释原因。