我正在尝试遍历在学生对象中启动的成绩数组,但得到“对象引用未设置为对象的实例”。我相信下面的for (int i = 0; i < (students[i].Grades.Length); i++)
行只会运行3次(“成绩”数组的大小)然后终止,但这似乎是为了满足学生的迭代需求?
如果是这样,我有点迷茫,不知道如何到达主题领域而不是使用这种迭代?可能加上我是新手,因此非常感谢您提供任何建议!
// 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;
}
}
答案 0 :(得分:0)
您正在为学生和学生的成绩使用相同的索引(TabView
)。您真正需要的是一个嵌套循环,一个遍历学生的循环,一个内部循环以遍历该学生的成绩:
i
或者您可以使用for (int i = 0; i < students.Length; ++i)
{
for (int j = 0; j < students[i].Grades.Length; ++j)
{
Console.Write(" {0}: ", students[i].Grades[j].Subject);
}
}
循环,可以说它更干净:
foreach
您还需要在foreach (var student in students)
{
foreach (var grade in student.Grades)
{
Console.Write(" {0}: ", grade.Subject);
}
}
数组中实际创建Student
对象。您不能只实例化数组本身,否则所有元素都将为null。
student