【问题标题】:C#: Definition of the scope of variables declared in the initialization part of for-loops? [duplicate]C#:定义在for循环的初始化部分声明的变量范围? [复制]
【发布时间】:2011-08-05 10:38:10
【问题描述】:

可能的重复:
confused with the scope in c#
C# Variable Scoping

我对在 for 循环(等)的初始化部分中声明的变量范围背后的设计考虑因素感到好奇。这些变量似乎既不在范围内也不在范围外,或者我错过了什么?为什么会这样,什么时候需要这样?即:

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

【问题讨论】:

    标签: c# scope


    【解决方案1】:

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

    你不能在循环之外声明 i 的事实有点令人费解,但这与编译后所有变量声明都可以被认为是在声明它们的块的开头这一事实有关。那您的代码在实践中是否与以下内容相同:

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

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

    【讨论】:

    • 感谢您回答克里斯。上面的例子很明显会导致名称冲突。如果这是编译看到的方式,那么它是可以理解的。 +1 并被接受。
    【解决方案2】:

    当您声明 i=13 时,它具有方法范围。所以在那个方法中你已经声明了变量 i 并且在 for 循环范围内的第二个声明将是重复的。

    【讨论】:

    • Accept 如果它有一个 Method 范围,那么你不能在 for 循环范围之外引用它吗?注意设置 i = 12 的行。
    【解决方案3】:

    设计考虑很简单:避免混淆。几乎没有任何理由允许隐藏外部变量名。顺便说一句,这不仅仅是循环,这条规则适用于 C# 中的任何内部/外部范围。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-08-05
      • 2015-11-29
      • 1970-01-01
      • 1970-01-01
      • 2012-10-22
      • 2013-01-18
      • 1970-01-01
      相关资源
      最近更新 更多