为什么这个 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
在声明时被初始化为零时,编译器再次保证它在使用之前被初始化。
我对先声明变量然后 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
在声明时被初始化为零时,编译器再次保证它在使用之前被初始化。