Как добавить объект в список в другом классе? - PullRequest
0 голосов
/ 28 марта 2019

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

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

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

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

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

            return false; //FIXME
        }

Вот класс раздела:

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>();
        }    
    }

Вот класс ученика:

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>();
        }

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

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

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

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

1 Ответ

0 голосов
/ 28 марта 2019

Вы должны сделать свой 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));

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...