遍历对象中的数组

时间:2020-07-14 15:49:45

标签: c# loops iteration

我正在尝试遍历在学生对象中启动的成绩数组,但得到“对象引用未设置为对象的实例”。我相信下面的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;
    }
}

1 个答案:

答案 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