我有一个简单的类,其中包含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”。
答案 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方法。希望这会有所帮助。