在构造函数中填充数组

时间:2019-05-22 11:30:25

标签: c# arrays constructor initialization

我有一个简单的类,其中包含3个公共字段和1个私有数组。在构造函数中,我想使用类本身的对象初始化数组私有字段

我执行以下操作

public class Student
{
    public int StudentID { get; set; }
    public String StudentName { get; set; }
    public int Age { get; set; }
    private Student[] _studentArray;
    public Student()
    {
        _studentArray = new Student[]{
        new Student() { StudentID = 1, StudentName = "John", Age = 18 },
        new Student() { StudentID = 2, StudentName = "Steve",  Age = 21 },
        new Student() { StudentID = 3, StudentName = "Bill",  Age = 25 },
        new Student() { StudentID = 4, StudentName = "Ram" , Age = 20 },
        new Student() { StudentID = 5, StudentName = "Ron" , Age = 31 },
        new Student() { StudentID = 6, StudentName = "Chris",  Age = 17 },
        new Student() { StudentID = 7, StudentName = "Rob",Age = 19  },
    };
}

我构建并运行,出现以下错误:

  

System.StackOverflowException:'类型的异常   抛出“ System.StackOverflowException”。

4 个答案:

答案 0 :(得分:1)

这是因为在创建要初始化的类的数组时,正在创建此数组的无限实现。该构造函数将永远无法完成,因为构造函数中的每个条目都会产生x倍的时间。每一次都是x倍的次数,所以不断地不断

答案 1 :(得分:1)

这是由于无限循环(每个Student对象初始化其他学生的_studentArray等)。 您需要2个类:一个包含StudentArray的Student类和仅具有StudentID,StudentName和Age属性的Student类。

答案 2 :(得分:0)

您的代码是递归的,并导致无限循环。发生这种情况是因为

new Student()

调用Student类的无参数构造函数,然后尝试通过再次调用构造函数来实例化新的Student,依此类推。我想你要去哪里了?

答案 3 :(得分:0)

由于您正在像他们所说的那样进行无数递归,因此可以创建2个类。带有ctor的学生课程分为1个班级,而学生列表的学生分为1个班级,如下所示:

学生班:

public class Student
{
    public int studentID { get; set; }
    public String studentName { get; set; }
    public int age { get; set; }
    public Student(int StudentID, string StudentName, int Age)
    {
         studentID = StudentID;
         studentName= StudentName;
         age = Age;
    }
}

然后第二个类是StudentList,您可以在其中使用Add方法添加学生的数据:

public class StudentList : Collection<Student>
{
   public Student this[int ctr]
   {
      get{return this.Items[ctr]; }
      set{ this.Items[ctr] = value; }
   }

    new public Student Add(Student newStudent)
    {
        this.Items.Add(newStudent);
        return (Student)this.Items[this.Items.Count-1];
    }
}

您现在可以初始化StudentList并使用add方法。希望这会有所帮助。