#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. Только вне вашего конструктора. Я включил необходимый код