不同的方式在C#中定义对象列表?

时间:2015-05-23 13:19:25

标签: c# list

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

static void Main(string [] args)     {

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

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

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

大学班级 {     学生[]学生=新生[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是一个为用户提供所需数字的变量。

然后在朋友的帮助下改变程序,但我遇到了这个问题。

class University
{
 //  Student[] student = new Student[3];
   public int NumbersOfStudents { get; private set; }

  public Student[] student;

   public University(int numberOfStudents)
    {
        for (int i = 0; i < numberOfStudents; i++)
            student[i] = new Student();
    }
     private int n = 0;
     /* public University()
      {

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

但是当我运行它时,我得到错误:对象引用未设置为对象的实例。

notic:程序无法使用该列表。

1 个答案:

答案 0 :(得分:2)

您永远不会初始化student字段,因此它为空。你可以使用:

// Note: public fields are almost *always* a bad idea
private readonly Student[] students;

public University(int numberOfStudents)
{
    students = new Student[numberOfStudents];
    for (int i = 0; i < numberOfStudents; i++)
    {
        students[i] = new Student();
    }
}

然而,在我看来,这是一个非常讨厌的解决方案 - 为什么要创建所有这些无用的Student对象?为什么要提前填充University

最好使用List<T>而不是数组:

public class University
{
    private readonly IList<Student> students = new List<Student>();
    // Presumably some other fields and properties

    public void AddStudent(Student student)
    {
        students.Add(student);
    }
}