2013-12-02 3 views
1

Я пытаюсь создать класс, который хранит данные о студенте и его список курсов с отметками. Но когда я попытался добавить данные для тестирования, я получил ошибку на «student.courses.Add (курс)», что «Ссылка на объект не установлена ​​в экземпляр объекта». Может ли кто-нибудь дать мне подсказку, что я делаю неправильно?Создание общего списка из classproperties

static void Main(string[] args) 
{ 
    var student = new Student(); 
    student.id = 1; 
    student.name = "John"; 
    student.lastName = "K."; 

    var course = new Course(); 
    course.code = 123; 
    course.nameOfCourse = "Course Name"; 
    student.courses.Add(course); 
} 

 

public class Student 
{ 
    public int id { get; set; } 
    public string name { get; set; } 
    public string lastName { get; set; } 
    public List<Course> courses { get; set; } 
} 


public class Course 
{ 
    public int code { get; set; } 
    public string nameOfCourse { get; set; } 
    public int mark{ get; set; } 
} 

enter image description here

+0

Вам необходимо активировать 'student.courses'. 'student.courses = new Список ();' –

ответ

4

Вы не инициализируется courses свойство:

var student = new Student(); 
    student.Courses = new List<Course>(); 
    student.Id = 1; 
    student.Name = "John"; 
    student.LastName = "K."; 

Но лучше инициализировать его внутри Student класса, так что было бы:

public class Student 
{ 
    private List<Course> courses = new List<Course>(); 

    public int Id { get; set; } 
    public string Name { get; set; } 
    public string LastName { get; set; } 
    public List<Course> Courses 
    { 
     get 
     { 
      return courses; 
     } 
     set 
     { 
      courses = value; 
     } 
    } 
} 

Сторона примечания: лучше назвать общедоступные свойства верхним регистром и частными полями с нижним регистром.

1

Курсы list в Student никогда не инициализируются. Самый простой способ исправить это с кодом, чтобы написать класс Student как это:

public class Student 
{ 
    public int id { get; set; } 
    public string name { get; set; } 
    public string lastName { get; set; } 
    public List<Course> courses { get; set; } 

    Public Student() 
    { 
     courses = new List<Course>(); 
    } 
} 

Подобно этому, вы можете забыть о том, чтобы инициализировать курсы после создания экземпляра Student. В противном случае, вам придется сделать это вручную с помощью каждого экземпляра вы создаете, например:

var student = new Student(); 
student.courses = new List<Course>(); 
1

Вы инициализировать student, но так как вы не инициализировать courses свойство, оно null по умолчанию, потому что это описание товара. (List<Course>)

student.courses = new List<Course>(); 
2

Вы пытаетесь вызова метода Добавить на нулевое значение (который student.courses). Попробуйте перепроектировать код примерно так:

public class Student 
{ 
    // Courses are always exist, but list may be empty 
    private List<Course> m_Courses = new List<Course>(); 

    public int id { get; set; } 
    public string name { get; set; } 
    public string lastName { get; set; } 

    // There's IMHO no need in set accessor 
    // (lack of "set" is a good thing to prevent "student.courses = null;" code) 
    public List<Course> courses { 
     get { 
     return m_Courses; 
     } 
    } 
} 
Смежные вопросы