Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 未使用for循环将对象引用设置为对象错误的实例_C#_.net_Object Reference - Fatal编程技术网

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

C# 未使用for循环将对象引用设置为对象错误的实例,c#,.net,object-reference,C#,.net,Object Reference,然后,我的程序可以工作,但它会根据输入的学生数量显示消息框的次数,最后一个值是正确的平均值 我使用了一个名为Student的类来计算平均值。但这不是问题所在,因为显示的是正确的平均值 如何修复此错误?我认为问题是因为您试图访问阵列/集合中没有实例的项(为什么会收到此错误)。将计数器设置为0有效,因为student[0]具有student的实例 如果您只想获取一个项目,不需要循环,您可以通过传入数组的索引直接访问student[i],即0 private void btnAverage_C

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

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


如何修复此错误?

我认为问题是因为您试图访问阵列/集合中没有实例的项(为什么会收到此错误)。将计数器设置为0有效,因为
student[0]
具有
student
的实例

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

    private void btnAverage_Click(object sender, EventArgs e)
    {

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

首先,您似乎不需要循环,因为
计数器
计数器
转到
计数器

其次,我怀疑你犯了一个错误

如果你试试这个会怎么样

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

您的问题是
student[counter]
为空,而
student[0]
为空,因此我猜您的
计数器
student
数组没有正确对齐。

试试看

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

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

一种不太容易出错的方法是使用
列表而不是数组:

if (student.Length > 0)
{
    MessageBox.Show("" + student[student.Length - 1].Average)
}
List students=newlist();
私有void btnAddStudent_单击(对象发送者,事件参数e)
{
添加(学生)(txtStudentName.Text,txtstudentlusname.Text,
int.Parse(txtExamMark.Text),计数器);
计数器++;
}
私有void btnAverage_单击(对象发送方,事件参数e)
{
if(students.Any())
{
MessageBox.Show(“+students.Last().Average”);
}
}

请用您的具体问题更新您的标题。阅读完整堆栈跟踪是什么?不仅仅是消息,整个内容,不要忽略细节。1.您设置了任何断点并获取未定义的变量吗?2.哪里定义了
计数器
?您的
计数器
变量是什么?如果student是典型的.net数组or arraylist,该错误可能与越界索引有关。更可能的情况是,该数组被声明为相当大,并且OP正在尝试访问一个现有的索引,但该索引尚未分配。@J.Steen-是的,这是我在回答中试图解释的。我已编辑以进一步澄清这一点。抱歉,是的,我错了阅读。让我困惑的无关信息。=)谢谢,但我们的讲师给了我们实用的知识,要求我们使用对象数组来编写……如果
student.Length==0
if (student.Length > 0)
{
    MessageBox.Show("" + student[student.Length - 1].Average)
}
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);
    }
}