使用for循环未将对象引用设置为对象错误的实例

时间:2013-03-14 09:31:06

标签: c# .net object-reference

    private void btnAddStudent_Click(object sender, EventArgs e)
    {
        student[counter] = new Student(txtStudentName.Text, txtStudentSurname.Text,     int.Parse(txtExamMark.Text), counter);
        counter++;

    }

    private void btnAverage_Click(object sender, EventArgs e)
    {

        for (int i = counter; i <= counter; i++)
            MessageBox.Show("" + student[i].Average);
    }

我的程序给了我错误:

  

对象引用未设置为对象的实例。

我只希望循环运行一次才能显示最后计算的平均值。如果我这样做: 即:将int i = counter更改为i = 0

    private void btnAverage_Click(object sender, EventArgs e)
    {

        for (int i = 0; i < counter; i++)
            MessageBox.Show("" + student[i].Average);
    }

然后我的程序可以运行,但根据输入的i学生数量,它会多次显示消息框,最后一个值是正确的平均值。

我使用了一个名为Student的类来计算平均值。然而,这不是问题,因为正在显示正确的平均值。

我该怎么做才能解决此错误?

5 个答案:

答案 0 :(得分:3)

首先,由于countercounter转到counter,您似乎不需要循环。

其次,我怀疑你有一个错误。

如果你试试这会怎么样?

private void btnAverage_Click(object sender, EventArgs e)
{
    if (counter > 0)
        MessageBox.Show("" + student[counter-1].Average);
}

答案 1 :(得分:2)

您的问题是student[counter]为空,而student[0]不是,所以我猜您的counter未与student数组正确对齐。

答案 2 :(得分:2)

尝试

if (student.Length > 0)
{
    MessageBox.Show("" + student[student.Length - 1].Average)
}

没有循环 - 只显示数组中的最后一个平均值。

答案 3 :(得分:1)

我认为问题是因为您正在尝试访问没有实例的数组/集合中的项目(为什么您收到错误)。将计数器设置为0有效,因为student[0]的实例为Student

如果您只想获得一个项目,则不需要循环,您可以通过传入数组的索引直接访问student[i],即0

MessageBox.Show("" + student[0].Average);

答案 4 :(得分:0)

不易出错的方法是使用List<T>而不是数组:

List<Student> students = new List<Student>();
private void btnAddStudent_Click(object sender, EventArgs e)
{
    students.Add(Student(txtStudentName.Text, txtStudentSurname.Text,
                 int.Parse(txtExamMark.Text), counter);
    counter++;
}

private void btnAverage_Click(object sender, EventArgs e)
{
    if(students.Any())
    {
        MessageBox.Show("" + students.Last().Average);
    }
}