难以在C#中定义对象列表

时间:2015-05-22 15:51:58

标签: c#

我写了一个应该得到名单和信息列表的程序。好吧,我得解决几个班级的问题,比如学生和大学都要回答。但问题是我计划获取学生信息

 static void Main(string[] args)
    {

        Console.WriteLine("Some students enter the information you want? ");
        Count = int.Parse(Console.ReadLine());

        University university = new University();        
        university.Add();
        university.Sort();
        university.Report();
        Console.ReadKey();
    }

要解决这个问题,我必须指定学生人数。

class University
{
    Student[] student = new Student[3]; 

     private int n = 0;
     public University()
     {

             for (int i = 0; i < 3; i++)
                 student[i] = new Student();
     }

     public void Add()
     {
         Console.WriteLine();
         for (int i = 0; i < 3; i++)
         {
             student[n].Read();
             n++;
         }
     } 

例如,我有三个学生人数。如何创建一种方法来输入提供信息而不是默认的学生数量?而不是数字3是一个为用户提供所需数字的变量。

2 个答案:

答案 0 :(得分:2)

您可以定义一个属性,该属性可以包含您所在大学的学生人数,并在您创建大学时对其进行初始化。

class University
{
    public int NumbersOfStudents { get; private set; }

    public Student[] students;

    public University(int numberOfStudents)
    {
        NumberOfStudents = numberOfStudents;
        students = new Student[numberOfStudents];
    }
}

所以,当你想创建一所拥有1000名学生的大学时,你会这样做:

var university = new University(1000);

现在名为university的对象有一组学生,其中有1000个“插槽”。实际上,此数组中的每个项目都是null。我的意思是

university.Students[0], university.Students[1], ...

null

然而,我不相信这是达到您想要的最有效方式。如果我是你,我会为此选择一个List。我们通常使用数组,当我们知道将放置在那里的项目数量时,我们将来会遇到任何我们想要添加一个项目的情况,这是不可能的,使用数组,因为数组具有固定的大小。另一方面,List是一个没有固定大小的数据结构,它可以扩展,因为你想在其中添加更多项目。

就代码而言,我会选择这个:

class University
{
    public List<Student> Students {get; private set; }

    public University()
    {
        Students = new List<Student>();
    }
}

现在你可以创建一个大学的实例,并且这样做,你也将创建一个没有项目的新学生列表。

var university = new University();

现在,您可以将学生添加到大学的学生中,如下所示:

university.Students.Add(new Student());

答案 1 :(得分:1)

我会稍微重构你的代码以使用Lists,在这种情况下,列表比数组更强大,因为数组不可变。

static void Main(string[] args) {
 Console.WriteLine("Please enter the number of students: ");
 Cunt = int.Parse(Console.ReadLine());
 University university = new University(Cunt);
 university.AddStudent(new Student() /*Student logic here.*/);
 university.Sort();
 university.Report();
}

class Student {
 //Properties here...
 public Student(){
      //Default values here...
 }
}

class University {
 private List<Student> _Students;
 public Students {
      get {
           return _Students;
      }
      //In Microsoft's guidelines, list shouldn't be exposed as properties.
      protected set {
           //Add list replacement logic here.
           _Students = value;
      }
 }
 public University(Int32 StudentCount) {
      _Students = new List<Student>(new Student[StudentCount]);
 }
 public void AddStudent(Student StudentToAdd) {
      //Add your logic here...
      _Students.Add(StudentToAdd);
 }
}