【问题标题】:Why does this if statement not intialize or update my variable? [duplicate]为什么这个 if 语句没有初始化或更新我的变量? [复制]
【发布时间】:2021-10-30 08:04:43
【问题描述】:

我对声明变量,然后在代码块(例如 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”,那么前面的两个示例都可以完美运行。

谁能给我解释一下?

【问题讨论】:

  • 这篇文章可以清楚地回答你的问题 IMO stackoverflow.com/a/8933935/2946329
  • 好的,谢谢!似乎 C# 编译器不知道 if 语句中的代码是否会执行,所以它必须分配它们的默认值。

标签: c# if-statement initialization declaration


【解决方案1】:

如果编译器在使用之前无法确定result 已初始化,则会失败并返回错误 CS0165 (Use of unassigned local variable)。

考虑到num1不是一个常量,编译器不能保证初始化后它保持1result = mu,1 + num2会被执行。这个例子可能看起来微不足道,但改变代码以使另一个线程可以在num1 的初始化和检查之间操作值的方式并不难。但是当你将条件更改为true时,编译器可以确定result在使用之前总是会被初始化,从而编译。

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

【讨论】:

    猜你喜欢
    • 2017-01-26
    • 2019-11-06
    • 2018-04-28
    • 1970-01-01
    • 2017-03-10
    • 1970-01-01
    • 1970-01-01
    • 2012-08-09
    • 1970-01-01
    相关资源
    最近更新 更多