为什么需要初始化字符串变量“名称”?

时间:2019-11-17 13:46:18

标签: c#

这令人沮丧。在输出到列表框的末尾附近的代码行中,在“名称”变量上不断出现错误“使用未分配的局部变量”。

解决方案是初始化变量“名称”。

起初,我只是声明了“ name”变量,而没有对其进行初始化。这引发了“使用未分配的局部变量”的错误。当我最后还初始化该变量(如下所示)时,错误消失了。

但是我不明白这一点,因为当代码到达输出行时,名称变量就被分配了。

有人可以解释为什么初始化“名称”变量摆脱了编译错误吗?

'''

        try
        {
            StreamReader inputFile;     // StreamReader object to read the file
            string line;                // To hold a line from the file.
            int row = 0;                // Student/line counter.
            int column = 0;             // Counter for columns in CSV file.
            int total = 0;              // Accumulator for grades.
            double average = 0;         // Average test score
            string name = "";           // each student's name

            // Create delimiter array
            // Why is this necessary?  Why not just put the delimiter in the Split method call?
            //char[] delim = { ',' };

            // Open the CSV file
            inputFile = File.OpenText("Grades.csv");

            while (!inputFile.EndOfStream)
            {
                // increment the row counter
                row++;

                // Read a line from the file
                line = inputFile.ReadLine();

                // Get the test scores as tokens
                string[] scores = line.Split(',');

                // Set the accumulator to zero
                total = 0;

                // Calculate the total of the test score tokens
                for (column = 0; column < scores.Length; column++)
                {
                    if (column == 0)
                    {
                        name = scores[column];
                    }
                    else
                    {
                        total += int.Parse(scores[column]);
                    }
                }

                // Calculate the average test score
                average = (double)total / (scores.Length - 1);

                // Display the average
                //averagesListBox.Items.Add("The average for student " + row + " is " + average.ToString("n1"));
                averagesListBox.Items.Add("The average for " + name + " is " + average.ToString("n1"));
            }

            // Close the file
            inputFile.Close();

            // Display the total records read
            totalLabel.Text = row.ToString("n0");
        }

        catch (Exception ex)
        {
            // Display an error message
            MessageBox.Show(ex.Message);
        }
    }

'''

2 个答案:

答案 0 :(得分:3)

编译器无法证明在任何地方设置了 。如果scores.Length为零怎么办?然后没有分配。因此,编译器在未分配值的情况下抛出错误是正确的。

如果您添加一个条件scores.Length总是大于零,则编译器可能会推断出始终设置了一个值。而且,您始终可以将其直接设置为数组中的第一个元素,然后无论如何都从1开始循环,这样效率更高。

答案 1 :(得分:2)

实际上,如果使用multipart/form-data,则可能使用了没有初始化的名称变量。

这就是警告的内容。