循环中的变量声明不会重置为默认值

Rec*_*ipe 1 c# compiler-construction loops declaration

考虑以下代码:

for (int i = 0; i < 10; i++)
{
    bool b;          /* #1 */
    if (i == 0)
    {
        b = true;    /* #2 */
    }
}
Run Code Online (Sandbox Code Playgroud)

我在#1#2设置了断点.

在第一时间(I = 0),b设定为false在#1在#2设置为真.

第二次(i = 1),b在#1处为真.

这对我来说没有意义,因为我假设当在第二个循环(i = 1)中开始时,b在声明时应该再次为假.

我假设在第二个循环中#1处的b = false.

有人在乎解释吗?

das*_*ght 7

b您在调试器中看到的值无效.C#需要初始化或分配所有局部变量,然后才能从中读取它们.因此,您在Visual Studio中的调试器中看到的值是无用的,因为它无法读取.没有办法编写一段C#代码,true在第二次迭代中"看到"该值被设置为,因为编译器会将此类用法标记为无效:

for (int i = 0; i < 10; i++)
{
    bool b;          /* #1 */
    Console.WriteLine(b); // <<== INVALID!!! This will not compile.
    // error CS0165: Use of unassigned local variable `b'
    if (i == 0)
    {
        b = true;    /* #2 */
    }
}
Run Code Online (Sandbox Code Playgroud)

如果你添加一个显式初始化false,上面的代码将编译.调试器也会false在断点处显示.