这令人沮丧。在输出到列表框的末尾附近的代码行中,在“名称”变量上不断出现错误“使用未分配的局部变量”。
解决方案是初始化变量“名称”。
起初,我只是声明了“ 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);
}
}
'''
答案 0 :(得分:3)
编译器无法证明在任何地方设置了 。如果scores.Length
为零怎么办?然后没有分配。因此,编译器在未分配值的情况下抛出错误是正确的。
如果您添加一个条件scores.Length
总是大于零,则编译器可能会推断出始终设置了一个值。而且,您始终可以将其直接设置为数组中的第一个元素,然后无论如何都从1开始循环,这样效率更高。
答案 1 :(得分:2)
实际上,如果使用multipart/form-data
,则可能使用了没有初始化的名称变量。
这就是警告的内容。