声明变量时“ for”循环的范围

卡泽姆·阿赫加里

我在编码时遇到了这种奇怪的行为。所以我在这里问。

for声明变量时循环的范围是什么

这段代码可以编译

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

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

这意味着两者int i不在同一范围内。

但是此代码无法编译。

for (int i = 0; i < 10; i++) { }
int i; // Conflicts with both first loop and second one.
for (int i = 0; i < 10; i++) { }

这意味着int i中间循环的范围与第一循环和第二循环相同。

但是,如何int i在两个for循环中具有不同的作用域,而具有中间的作用域int i呢?因为目前我在同一级别上看到它们。

我知道第二个代码无法编译。如果范围存在问题,那么为什么要先编译第一个代码。这是编译器内部的异常吗?

卡波

C#编译器不检查在另一个变量之前还是之后声明一个变量。重要的是范围。i在循环之间声明变量肯定与第二个循环冲突,因为如果i在循环内部使用,则无法区分i要使用变量至于第一个循环,仍然会显示错误,因为在其中i声明的块也封装了第一个循环。

例如,即使j内部括号外部不可见,也不会编译以下内容,因此,以下内容不会有任何歧义i

{
    {
        int i = 1;
        int j = 1;
    }

    int i = 0; // compiler error: A local variable i cannot be declared in this scope (...)
    // j is not visible here
}

编辑有关评论:

为什么下面的罚款?

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

声明for循环变量时,它仅在循环块内部可见这意味着两个变量的作用域是不相交的,因为没有代码行可以使一个块与另一个块“重叠”。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章