Как мне добавить объект в список в другом классе?

#c# #list #object

#c# #Список #объект

Вопрос:

Я обнаружил, что не могу реализовать критические разделы моего кода для проекта. Задание заключается в разработке серверной части на основе текстовой зачетной книжки. У меня есть метод addStudent , который должен добавлять ученика в список в разделе, также содержащемся в списке.

У меня есть метод в классе Gradebook, addStudent , который должен добавлять объект student в список, содержащийся в текущем объекте Section. Разделы также содержатся в списке. Я перепробовал всевозможные комбинации, но, похоже, не могу найти волшебных слов, которые действительно позволили бы мне добиться этого.

Файл определен в 5 файлах / классах; Назначение (пока можно игнорировать), Студент, Секция, Зачетная книжка, Программа (также можно игнорировать, используется только для интерфейса (ввод для передачи в мехтоды и т.д.)).

Вот метод, который мне нужно реализовать, содержащийся в классе Gradebook.

 public bool addStudent(string firstName, string lastName, string username, long phoneNumber)
        {

            return false; //FIXME
        }
  

Вот раздел Class:

 class Section
    {
        string sectionName;
        //probably more properties need to be implemented, or at least would make life simpler
        public Section(string sectionName)
        {
            this.sectionName = sectionName;
            List<Student> students = new List<Student>();
            List<Assignment> assignments = new List<Assignment>();
        }    
    }
  

Вот класс Student:

 class Student
    {
        string firstName = null;
        string lastName = null;
        long studentID = 0;
        long phoneNumber = 0;
        int absentcount = 0;
        int tardyCount = 0;
        double gradePercent = 0;
        //need to add more properties, read through Gradebook API for more

        public Student(string firstName, string lastName, long studentID, long phoneNumber)
        {
            this.firstName = firstName;
            this.lastName = lastName;
            this.studentID = studentID;
            this.phoneNumber = phoneNumber;
            List<Assignment> studentAssignments = new List<Assignment>();
        }
  

Я знаю о повторяющихся определениях присваивания, я пока сохраняю оба, вероятно, для избыточности, хотя это может быть не очень хорошей идеей, и в этом случае я сохраню только версию student.

Я ожидаю, что смогу просто добавить несколько более длинных строк, ссылающихся на каждый объект в соответствующих списках, но я всегда выдаю ошибку, либо что мне нужно сделать поля доступными только для чтения, либо что объект не существует. Единственным решением, которое я могу придумать, было бы сохранить индекс для последнего измененного элемента в списке, но я бы предпочел этого не делать.

Я бы логически подумал сделать что-то вроде этого (я знаю, что это неправильно): currentSection.Student.Add(Student(firstName, lastName, username, phoneNumber)) . Я знаю, что этого не может быть, потому что мне нужно ссылаться на элемент списка, а не на сам класс.

Возможно, я просто немного переосмыслил это, но буду признателен за любую помощь.

Ответ №1:

Вы должны сделать свой List<Student> students доступный извне ваш Session конструктор

Измените ваше Section объявление на:

 class Section
{
    string sectionName;
    public List<Student> students;

    //probably more properties need to be implemented, or at least would make life simpler
    public Section(string sectionName)
    {
        this.sectionName = sectionName;
        students = new List<Student>();
        List<Assignment> assignments = new List<Assignment>();
    }    
}
  

Добавьте ученика в свой список с

currentSection.students.Add(new Student(firstName, lastName, username, phoneNumber));

Комментарии:

1. Как при перемещении `List<Student> students вне конструктора, но все еще в том же классе, или при перемещении его в совершенно другой класс?

2. Только вне вашего конструктора. Я включил необходимый код