Доступ к элементу, который находится внутри списка в C # - PullRequest
0 голосов
/ 07 ноября 2018

У меня есть список

public static List<Courses> course = new List<Courses>();

И Курсы выглядят так,

 class Courses
{
    public string courseName { get; set; }
    public List<Faculty> faculty { get; set; }
    public List<Student> student { get; set; }

    public override string ToString()
    {  
        return courseName + ", which features " + faculty.Count + ", faculty member(s) and " + student.Count + " student(s).";
    }
}

Я пытаюсь получить доступ к факультету Списка внутри курса списка, чтобы я мог пройти и распечатать его содержимое. Как бы я поступил так в C #?

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

 //print stuff
        int courseCounter = 0, studentCounter = 0, facultyCounter = 0;
        //object[] o = course.ToArray()
        foreach(object o in course)
        {
            courseCounter++;
            Console.WriteLine("Course #" + courseCounter + " is " + o.ToString());

            foreach(object f in HOW WOULD I ACCESS IT HERE)
            {

            }
        }

Ответы [ 3 ]

0 голосов
/ 07 ноября 2018

Основная проблема с вашим кодом заключается в следующей строке:

foreach(object o in course)

Переменная цикла o на самом деле Course, но, поскольку она имеет тип Object, она не знает о своих свойствах, пока вы ее не приведете.

Если вы измените переменную цикла на Course, вы сможете получить доступ к свойствам.

foreach(Courses c in course)
{
    courseCounter++;
    Console.WriteLine("Course #" + courseCounter + " is " + c.ToString());

    foreach(Faculty f in c.faculty)
    {

    }

    foreach(Student s in c.student)
    {

    }
}
0 голосов
/ 07 ноября 2018

Вам нужно создать созданный вами класс public, чтобы получить доступ к его внутренним полям и переменным.

public class Courses
{
    //Properties (Begin property with a capital)
    public string CourseName { get; set; }
    public List<Faculty> Faculties { get; set; }
    public List<Student> Students { get; set; }

    public override string ToString()
    {  
        return courseName + ", which features " + faculty.Count + ", faculty member(s) and " + student.Count + " student(s).";
    }
}

Теперь, если вы создадите несколько курсов и добавите их в свой список, вы сможете получить к ним доступ следующим образом:

//Create a new course or as many as you wish and fill the model class with data.
Course mathCourse = new Course()
{
    CourseName = "Math",
    Faculties = new List<Faculty>(),
    Students = new List<Student>()
;
mathCourse.Faculties.Add(new Faculty("Faculty for math Alpha"));
mathCourse.Faculties.Add(new Faculty("Faculty for math Beta"));
mathcourse.Students.Add(new Student("Ben"));

//create as many different courses as you want and at them to your list you've created.
course.Add(mathCourse);

//you can now reach the faculty in the course like this
//We select with [0] the first course in the courseList, then we select the first faculty of the course with [0] and select its property 'name'.
//This goes for any property as long the class Faculty is public and its property is too.
string facultyName = course[0].Faculties[0].Name;

//>> facultyName => Faculty for math Alpha  

Возможно, эта документация поможет вам в дальнейшем:
Microsoft по свойствам
MSDN по коллекциям

Я надеюсь, что это помогло!

РЕДАКТИРОВАТЬ
Я слишком долгонаписав это и пропустив вашу правку, вы захотите цикл foreach.Смотрите другие ответы для этого.:)

0 голосов
/ 07 ноября 2018

Прежде всего, не используйте object в качестве типа переменной итерации. Вы не сможете получить доступ к каким-либо членам класса ... и это просто странно.

Используйте тип класса:

foreach (Course course in courses)

или для мест, подобных var (это тип логический вывод , var заменяется на Course под капотом, потому что это аргумент универсального типа courses. В разных контекстах он будет выбирать тип по-другому ... что-то узнать отдельно)

foreach (var course in courses)

Когда у вас есть это, внутренний цикл очень прост, просто наберите Faculty (его уже public)

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