mlabenski
mlabenski

Reputation: 33

Adding an Array of Objects to another Class c#

I am attemping to read a text file in the format of (The # at end is just the number of classes they're in, but I dont save the course name with the fac/students class)

Course Biology
Faculty Taylor Nate 0
Student Doe John 3
Student Sean Big 0
Course Art
Faculty Leasure Dan 1

The first input should be a course, followed by the faculty and students of the specific course. The Course class should contain a collection of faculty members and a collection of students.

I have been able to put each course/student/faculty into their respective class, but I am having trouble visualizing a way to add the students/faculty to the course.

My current idea putting the data into their respective classes would be to keep the current index of the course- therefore I have it saved as

courses[currentCourse++]

so when I parse the next line, (being a faculty/student) I already know what the course index should be.

        using (StreamReader reader = new StreamReader(fileName))
        {
            while (!reader.EndOfStream)
            {
                lineCounter++;
                line = reader.ReadLine();
                string[] words = line.Split(' ');
                Console.WriteLine(words[0]);
                if (words[0] == "Course")
                    {
                        string nameOfCourse = words[1];
                        courses[currentCourse++] = new Course
                        {
                            Name = nameOfCourse
                        };
                    }
                    if (words[0] == "Faculty")
                    {
                        string firstName = words[1];
                        string lastName = words[2];
                        string numOfClasses = words[3];
                        faculty[currentFaculty++] = new Faculty
                        {
                            FirstName = firstName,
                            LastName = lastName,
                            NumOfClasses = numOfClasses,
                        };
                    }
                    if (words[0] == "Student")
                    {
                        string firstName = words[1];
                        string lastName = words[2];
                        string numOfClasses = words[3];
                        students[currentStudent++] = new Student
                        {
                            FirstName = firstName,
                            LastName = lastName,
                            NumOfClasses = numOfClasses,
                        };
                    }

I know the problem lies in the courses class itself- but i'm not sure the terminology to add a class to another class.

public class Course
{
    public override string ToString()
    {
        return $"{Name}";
    }
    public string Name { get; set; }

}

public class Student
{
    public override string ToString()
    {
        return $"{FirstName} {LastName} {NumOfClasses}";
    }
    public string FirstName { get; set; } = string.Empty;

    public string LastName { get; set; } = string.Empty;

    public string NumOfClasses { get; set; } = string.Empty;
}

Thanks for reading!

Upvotes: 0

Views: 1959

Answers (2)

Chris
Chris

Reputation: 2304

You want to add a collection of Student and Faculty to the course class, correct? You can do so like this by simply adding a List<T> to your Course class and then initializing it in a constructor.

public class Course
{
    public override string ToString()
    {
        return $"{Name}";
    }
    public string Name { get; set; }

    public List<Student> Students { get; set; }

    public List<Faculty> FacultyMems { get; set; }

    public Course()
    {
        Students = new List<Student>();
        FacultyMems = new List<Faculty>();
    }

}

And in your using block, you can add each student/faculty to the course as so:

if (words[0] == "Course")
{
   string nameOfCourse = words[1];
   currentCourse++;
   courses[currentCourse] = new Course
   {
      Name = nameOfCourse
   };
}
if (words[0] == "Faculty")
{
    string firstName = words[1];
    string lastName = words[2];
    string numOfClasses = words[3];
    courses[currentCourse].FacultyMems.Add(new Faculty
    {
        FirstName = firstName,
        LastName = lastName,
        NumOfClasses = numOfClasses,
    });
}
if (words[0] == "Student")
{
    string firstName = words[1];
    string lastName = words[2];
    string numOfClasses = words[3];
    courses[currentCourse].Students.Add(new Student
    {
        FirstName = firstName,
        LastName = lastName,
        NumOfClasses = numOfClasses,
    });
}

With this, each time you encounter "Course" your course list will add a new item and then you can append students/faculty/etc when those values occur.

This can be simplified even further but the concept is there for you to follow. Hope this helps.

Upvotes: 1

Matti Price
Matti Price

Reputation: 3551

If I'm understanding you correctly, you want your courses to have a list of faculty and students?

public class Course

{
    public override string ToString()
    {
        return $"{Name}";
    }
    public string Name { get; set; }
    public List<Student> Students { get; set; }
    public List<Faculty> FacultyMembers {get; set;} 

}

Just be sure to initialize the Lists before trying to add things to them otherwise you'll get a null ref exception.

Upvotes: 0

Related Questions