问题描述
我对编码非常陌生,只是我的第一步,所以我很抱歉没有在技术上正确地说出一些东西。 我尝试从 Structure 类中的 Array1 上调用 Structure Student 中的 Array2。
最后两行代码不起作用,我得到“未处理的异常:System.NullReferenceException:未将对象引用设置为对象的实例。”
我该如何纠正?我觉得我错过了一些无关紧要的东西,但仍然无法弄清楚。提前感谢您的所有回答!
class Program
{
struct Class
{
public Student[] Array1;
}
struct Student
{
public string firstName;
public string lastName;
public int code;
public GradesCourse[] Array2;
}
struct GradesCourse
{
public string nameCourse;
public double gradeMidterm;
}
Class myClass;
myClass.Array1 = new Student[2];
Student myStudent;
myStudent.Array2 = new GradesCourse[2];
for (int i = 0; i < myClass.Array1.Length; i++)
{
myClass.Array1[i].firstName = Console.ReadLine();
myClass.Array1[i].lastName = Console.ReadLine();
myClass.Array1[i].code = Convert.ToInt32(Console.ReadLine());
for (int j = 0; j < myStudent.Array2.Length; j++)
{
myClass.Array1[i].myStudent.Array2[j].nameCourse = Console.ReadLine();
myClass.Array1[i].myStudent.Array2[j].gradeMidterm = Convert.Todouble(Console.ReadLine());
}
}
解决方法
首先你的代码无法编译
有一个 .myStudent
不应该出现在最后两行。
因为它们是结构体,所以不应在循环的任何部分创建新的 myStudent
变量,因为它们不会指向 myClass
中的相同结构体
看看这个更正后的代码:
void Main()
{
Class myClass;
myClass.Array1 = new Student[2];
for (int i = 0; i < myClass.Array1.Length; i++)
{
myClass.Array1[i].firstName = Console.ReadLine();
myClass.Array1[i].lastName = Console.ReadLine();
myClass.Array1[i].code = Convert.ToInt32(Console.ReadLine());
myClass.Array1[i].Array2 = new GradesCourse[2];
for (int j = 0; j < myClass.Array1[i].Array2.Length; j++)
{
myClass.Array1[i].Array2[j].nameCourse = Console.ReadLine();
myClass.Array1[i].Array2[j].gradeMidterm = Convert.ToDouble(Console.ReadLine());
}
}
}