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

本文关键字:错误 实例 对象引用 对象 for 循环 设置 未使用 | 更新日期: 2023-09-27 18:04:03

    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);
    }

我的程序给我错误:

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

我只希望循环运行一次,只显示最后计算的平均值。如果我这样做:例如:change int i = counter to i = 0

    private void btnAverage_Click(object sender, EventArgs e)
    {
        for (int i = 0; i < counter; i++)
            MessageBox.Show("" + student[i].Average);
    }

然后我的程序工作,但它显示消息框的次数取决于输入的学生i的数量,最后的值是正确的平均值。

我使用一个叫做Student的类来计算平均值。但这不是问题,因为显示的是正确的平均值。

我能做什么来修复这个错误?

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

首先,你似乎不需要一个循环,因为counter是从countercounter

其次,我怀疑你有一个比别人差一分的错误。

如果你尝试这个会发生什么?

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

你的问题是student[counter]是空的,而student[0]不是,所以我猜你的counter没有正确地与你的student数组对齐。

Try

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

不带循环-这将只显示数组中的最后平均值

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

如果你只想得到一个元素,你不需要循环,你可以通过传递数组的索引直接访问student[i],即0

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

一种更不容易出错的方法是使用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);
    }
}