原谅一个愚蠢的问题,但我是C#& OOP。
任何人都可以帮我阻止“System.NullReferenceException:”吗?
我正在尝试按照说明进行操作,并使用我们迄今为止学到的东西(数组,类和构造函数)。
我创建了一个StudentSubjects类数组,并将其嵌入到Student类数组中。
我想打印每个学生科目的详细信息。
我可以访问StudentArray[0]
字段,但无法访问StudentArray[0].StudentSubjectsArray[0]
字段,因为“对象引用未设置为对象的实例”
我花了两周的时间寻找答案但却找不到任何关于如何设置的例子
StudentArray[0].StudentSubjectsArray[0].SubjectName = "Algebra";
任何建议最受赞赏。我的代码在下面......
using System;
namespace Nested_Arrays
{
public class Program
{
static void Main(string[] args)
{
Student[] StudentArray = new Student[1];
Console.WriteLine($"Hello");
StudentArray[0] = new Student();
StudentArray[0].StudentName = "Peter";
StudentArray[0].StudentLocation = "Australia";
Console.WriteLine($"{StudentArray[0].StudentName,10} {StudentArray[0].StudentLocation,15}");
StudentArray[0].StudentSubjectsArray[0].SubjectName = "Algebra";
StudentArray[0].StudentSubjectsArray[0].StudentsResult = "Pass";
Console.WriteLine($"{StudentArray[0].StudentName,10} {StudentArray[0].StudentLocation,15} {StudentArray[0].StudentSubjectsArray[0].SubjectName,15} {StudentArray[0].StudentSubjectsArray[0].StudentsResult,10}");
Console.WriteLine($"Goodbye");
}
public class Student
{
public string StudentName;
private string studentName
{ get { return studentName; } set { studentName = value; } }
public string StudentLocation;
private string studentLocation
{ get { return studentLocation; } set { studentLocation = value; } }
public StudentSubjects[] StudentSubjectsArray;
private StudentSubjects[] studentSubjectsArray
{ get { return studentSubjectsArray; } set { studentSubjectsArray = value; } }
//Constructor
public Student() { }
}
public class StudentSubjects
{
public string SubjectName;
private string subjectName
{ get { return subjectName; } set { subjectName = value; } }
public string StudentsResult;
private string studentsResult
{ get { return studentsResult; } set { studentsResult = value; } }
//Constructor
public StudentSubjects() { }
}
}
}
答案 0 :(得分:3)
您只需添加以下内容:
StudentArray[0].StudentSubjectsArray = new StudentSubjects[1];
StudentArray[0].StudentSubjectsArray[0] = new StudentSubjects();
// and only then
StudentArray[0].StudentSubjectsArray[0].SubjectName = "Algebra";
答案 1 :(得分:0)
正如其他人所说的那样,你需要在分配数组中的对象之前创建数组,尽管你可以同时做两个。
例如,如果您想在一行中完成所有操作,则可以使用:
Student[] StudentArray = {
new Student {
StudentName = "Peter",
StudentLocation = "Australia",
StudentSubjectsArray = new[] {
new StudentSubjects {
SubjectName = "Algebra",
StudentsResult = "Pass"
}
}
}
};
答案 2 :(得分:0)
在我看来,一个好的做法是在构造函数中初始化数组。通过这种方式,您确定在使用对象时它不为空。
做类似的事情:
//Constructor
public Student() {
this.studentSubjectsArray = new StudentSubjects[1];
}