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