首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >为什么我的未初始化变量在TryParse中设置了它的值之后又变成未赋值了?

为什么我的未初始化变量在TryParse中设置了它的值之后又变成未赋值了?
EN

Stack Overflow用户
提问于 2020-09-24 21:12:25
回答 1查看 93关注 0票数 0

变量inputBool是在when循环之外声明的,然后当我尝试将userInput解析为布尔值时,在when循环中设置变量。但是,一旦while循环退出,inputBool就会再次未声明!

但是,如果我用一个值(EG )初始化inputBool变量,那么它将在while循环中进行设置,然后将其设置为TryParse内部分配给它的任何内容,即使在with循环退出之后也是如此。

这是我想要的行为,但是当我不立即初始化变量时,它为什么不能工作呢?

代码语言:javascript
代码运行次数:0
运行
复制
        foreach (string question in questions)
        {
            bool isBool = false;
            // inputBool declared here.
            bool inputBool;
            string userInput;

            while (!isBool)
            {
                Console.WriteLine(question);
                userInput = Console.ReadLine();

                // inputBool gets assigned a value here in the TryParse.
                isBool = Boolean.TryParse(userInput, out inputBool);
                if (!isBool) Console.WriteLine("Please respond with 'true' or 'false'.");
            }

            // inputBool is unassigned here!
            answers[askingIndex] = inputBool;
            askingIndex++;
        }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-24 21:26:20

从流分析的角度来看,不能保证至少执行一次while循环。当然,您不知道这是因为您的条件涉及一个初始化为bool值的false变量,但是编译器没有足够聪明地实现它。

因此,如果它至少不执行一次,那么inputBool在结束时仍然是统一的,因此出现了错误。

您需要确保变量在所有代码路径中都已初始化。有两个可能的解决办法:

  1. while更改为do...while。保证该变量至少执行一次,这将确保变量成为initialized.
  2. Initialize变量,使其成为一个合理的默认值。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64054477

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档