【问题标题】:Use of unassigned local variable? Can someone explain?使用未分配的局部变量?有人可以解释吗?
【发布时间】:2019-08-02 15:21:58
【问题描述】:

我是编写代码的新手,我了解一些,但我无法使某些事情发挥作用。

我希望这能让用户在授予他们访问权限之前先选择一个类别,但我收到错误消息“使用未分配的局部变量”。我是不是做错了什么?

    public static void Main(string[] args)

    {
        bool CalculateSavings, Grades;
        if (CalculateSavings == true)
        {
            int MySavings, Allowance, Food, Transportation, WeeklySavings, MonthlySavings;

            Console.WriteLine("Input your daily allowance:");
            Allowance = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine("Input your daily food expenses:");
            Food = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine("Input your daily transportation expenses:");
            Transportation = Convert.ToInt32(Console.ReadLine());

            {

                MySavings = Allowance - (Food + Transportation);
                Console.WriteLine("Your calculated daily savings: {0}", MySavings);

                WeeklySavings = MySavings * 5;
                Console.WriteLine("Your calculated weekly savings: {0}", WeeklySavings);

                MonthlySavings = WeeklySavings * 4;
                Console.WriteLine("Your calculated monthly savings: {0}", MonthlySavings);

                Console.ReadKey();
            }


        }
        else if (Grades == true)
        {
            double Filipino, English, Science, Math, History, Average;

            Console.WriteLine("Input grade in Filipino subject:");
            Filipino = Convert.ToDouble(Console.ReadLine());
            Console.WriteLine("Input grade in English subject:");
            English = Convert.ToDouble(Console.ReadLine());
            Console.WriteLine("Input grade in Science subject:");
            Science = Convert.ToDouble(Console.ReadLine());
            Console.WriteLine("Input grade in Math subject:");
            Math = Convert.ToDouble(Console.ReadLine());
            Console.WriteLine("Input grade in History subject:");
            History = Convert.ToDouble(Console.ReadLine());

            Average = (Filipino + English + Science + Math + History) / 5;
            Console.WriteLine("Overall grade average: {0}", Average);
            Console.ReadLine();

        }
    }
}

}

让用户在授予他们访问权限之前先选择一个类别,但我收到错误消息“使用未分配的局部变量”。

【问题讨论】:

  • 你在声明 if (CalculateSavings == true)Grades 中使用 CalculateSavings 在声明 else if (Grades == true) 但它们都没有被初始化,只是声明。
  • 哪一行报错?
  • 你声明了布尔变量bool CalculateSavings,Grades,但你没有初始化它们。好吧,因为这些是值类型,所以它们由运行时初始化。但是编译器想保护你免受粗心的错误,因为他确定你在使用之前没有赋值。
  • 总是必须在使用该值之前对其进行初始化。这适用于从最低的汇编程序级别到 .NET。更多“金属”语言”只会盲目地获取那些碰巧写入这些内存位置的位(从最后写入的任何内容),但 .NET 编译器在防止问题方面更加主动。

标签: c# if-statement unassigned-variable


【解决方案1】:

您需要设置变量。 喜欢:

bool CalculateSavings = true;
bool Grades = true;

C# 编译器不允许未分配的变量,因为这样可以避免可能的错误。

【讨论】:

  • 缺少编译器抱怨的要求解释。也许OP认为bool默认是false。除了这只会隐藏一个错误,因为Grades-block 永远不会被输入。这些布尔值应由用户输入确定。
  • 如果这是解决方案,那么首先拥有它们有什么意义?条件逻辑可以完全删除。我认为这个问题目前确实没有足够的信息来提供完整的答案。
【解决方案2】:

你也应该像下面的例子那样写 if else 语句

  if (CalculateSavings){
            // your Code
        }else if (Grades){  
     // your Code
   }

你还需要给变量赋值。

bool CalculateSavings = true;
bool Grades = true;

由于未分配的变量 c# 它给出错误。

【讨论】:

    【解决方案3】:

    在您附加到问题的代码中,您使用bool CalculateSavings, Grades; 定义变量,但您没有分配它们(如bool myVariable = true)。

    然后你尝试使用它们 ((CalculateSavings == true)) ,但是 C# 应该如何比较和使用它们?

    因此,要解决您的问题,您需要使用 truefalse 为布尔值分配它们。

    未赋值的变量就像:你需要卫生纸,你知道它是什么,但你根本没有。 (但不为空)。

    【讨论】:

    • 不确定卫生纸的类比是否有用 ;-)
    • 谁告诉你的 :) 我只是想让人们知道你总是应该买卫生纸
    • 他的帖子添加的内容比您迄今为止的任何 cmets 都多。
    【解决方案4】:

    您可以将存储盒类比为变量。

    也就是说,您从阁楼获得了两个盒子,因此您将它们标记为CalculateSavings 和Grades。接下来您需要根据其中的内容选择路径。

    编译器告诉您的是,无法确定其中的内容(从阁楼中取出时,这些盒子中可能存储了一些东西)。因此内容不可靠。编译器不会自动清理和初始化局部变量,而是让您有机会选择该值应该是什么。

    因此,在声明局部变量时设置一个初始值可以满足这种担忧。然后它知道盒子里有什么并可以安全地继续。

    bool CalculateSavings = false, Grades = true; // An example of initialized variables.
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-19
      • 1970-01-01
      • 2019-01-11
      • 1970-01-01
      • 1970-01-01
      • 2013-10-18
      • 2015-11-09
      • 2012-05-18
      相关资源
      最近更新 更多