【发布时间】:2020-11-04 00:23:04
【问题描述】:
我正在尝试遍历在学生对象中启动的 Grades 数组,但得到“对象引用未设置为对象的实例”。我相信以下行for (int i = 0; i < (students[i].Grades.Length); i++) 只会运行 3 次(Grades 数组的大小)然后终止,但它似乎旨在完成学生的迭代?:
如果是这样,我有点迷茫,想知道如何到达主题领域而不是使用这种迭代?可能会补充说我是新手,所以非常感谢任何建议!
// Iteration problems
for (int i = 0; i < (students[i].Grades.Length); i++)
{
Console.Write(" {0}: ", students[i].Grades[i].Subject);
}
大上下文中的部分代码:
class Program
{
static void Main(string[] args)
{
public Student[] students = new Student[] { };
students = new Student[5];
// Iteration problems
for (int i = 0; i < (students[i].Grades.Length); i++)
{
Console.Write(" {0}: ", students[i].Grades[i].Subject);
}
}
}
class Student
{
public GradeSubject[] Grades { get; set; } = new GradeSubject[]
{
new GradeSubject("Art"),
new GradeSubject("Geography"),
new GradeSubject("Math"),
};
}
public class GradeSubject
{
private string subject;
private char letter;
// Properties
public string Subject { get { return subject; } set { subject = value; } }
public char Letter { get { return letter; } set { letter = value; } }
public GradeSubject(string _subject)
{
subject = _subject;
}
}
【问题讨论】:
-
students = new Student[5];将Students 的5 元素数组分配给students,但实际上并未创建任何Student实例。相反,students的每个元素都是null,除非你不这样做。您需要执行与Grades相同的操作:为其元素分配一些实例。 -
我学会了修复 NullReferenceEx 的一种方法是使用断点单步执行代码并查看什么是 null。然后一旦你找到什么是 null 设置一个条件来防止它为 null 或跳过它,如果它是 null 取决于你想要你的代码做什么。