我在编码时遇到了这种奇怪的行为。所以我在这里问。
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] 删除。
我来说两句