gpt4 book ai didi

c# - 声明变量时 'for' 循环的范围

转载 作者:IT王子 更新时间:2023-10-29 04:24:09 27 4
gpt4 key购买 nike

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

声明变量时,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 的 block 也封装了第一个循环。

例如,即使 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 循环变量时,它仅在循环 block 内可见。这意味着两个变量的范围是不相交的,因为没有一行代码中的一个 block “重叠”另一个 block 。

关于c# - 声明变量时 'for' 循环的范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32371726/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com