为什么这个 if 语句没有初始化或更新我的变量?

Why does this if statement not intialize or update my variable?

我对先声明变量然后 initializing/assigning 在代码块(如 if 语句)中声明这些变量,然后在我的其余代码中使用该变量感到有点困惑。

如果声明了“result”但未事先初始化,则以下示例无法将 num1 + num2 的结果分配给 if 语句中的“result”。

        int num1 = 1;
        int num2 = 2;
        int result; //declared

        if (num1 == 1)
        {
            result = num1 + num2;
        }
        Console.WriteLine(result); //Use of unassigned local variable "result"

但是,预先声明和初始化“result”成功地更新了if语句中的“result”值。

        int num1 = 1;
        int num2 = 2;
        int result = 0; //declared and initialized

        if (num1 == 1)
        {
            result = num1 + num2;
        }
        Console.WriteLine(result); //3

此外,如果我将 if 语句中的条件简单地更改为“true”而不是“num1 == 1”,那么前面的两个示例都可以正常工作。

有人可以给我解释一下吗?

如果编译器无法确定 result 在使用前被初始化,它将失败并出现错误 CS0165(使用未分配的局部变量)。

考虑到num1不是一个常量,编译器不能保证它在初始化后仍然是1,然后执行result = mu,1 + num2。此示例可能看起来微不足道,但以另一个线程可以在 num1 的初始化和检查之间操纵值的方式更改代码并不困难。但是当您将条件更改为 true 时,编译器可以确定 result 将始终在使用之前进行初始化,因此它会编译。

类似地,当 result 在声明时被初始化为零时,编译器再次保证它在使用之前被初始化。