Как получить доступ к массиву объектов из другого класса - PullRequest
0 голосов
/ 07 апреля 2020

Я пытаюсь провести l oop через массив объектов и распечатать их свойства из другого класса.

Мой основной класс -

class Program
    {

        static void Main()
        {
            //This to be change to relative path
            string Path = @"C:\Users\";
            string[] lines = { }; ;

            //Reading file
            if (File.Exists(Path))
            {
                lines = File.ReadAllLines(Path);
                StudentReport.ReadStudents(lines);
            }
            else
            {
                Console.WriteLine("The file does't exist");
            }

            //Printing Students
            PrintStudent.Print(lines.Length);
        }
    }

Я использую это код для объявления массива

public class StudentReport
    {
        public static void ReadStudents(string[] Lines)
        {
            //declare an array with the number of students
            Student[] studentArray = new Student[Lines.Length];
            int StudentCounter = 0;

            foreach (string Line in Lines)
            {

                String[] Student = Line.Split(',');

                //Calculating values
                string ID = Student[0].PadLeft(10, '0');
                string name = Student[1];

                //Initialize the object
                studentArray[StudentCounter] = new Student
                {
                    FullName = name,
                    ID = ID,
                };

                StudentCounter++;
            }
        }
    }

И я использую этот класс для создания объекта моего студента

class Student
    {
        public string FullName { get; set; }
        public string ID { get; set; }
    }

Чтобы вывести свойства объекта студента, я создал другой класс. Проблема в том, что я не смог получить доступ к значению массива объектов из моего нового класса.

Класс, который я создал для целей вывода, следующий, но я не могу получить значения. Ошибка: «Студент не содержит определения для массива студента

public class PrintStudent
    {
        public static void Print(int StudentCounter)
        {

            for(int i = 0; i > StudentCounter; i++)
            {
                Console.WriteLine(Student.studentArray[i].FullName);
            }
        }
    }

1 Ответ

2 голосов
/ 07 апреля 2020

Ваша ошибка Student does not contain a definition for studentArray. Это потому, что у вашего Student класса нет studentArray, только свойства FullName и ID. Так что доступ к Student.studentArray[i] не имеет смысла.

Вероятно, вы хотите, чтобы ReadStudents возвращал studentArray, чтобы он не выходил за рамки go, изменяя сигнатуру метода для возврата Student [] и вызывая return StudentArray в конце.

Затем вы можете передать свой studentArray вашему PrintStudent.Print методу в параметрах.

Кстати, for(int i = 0; i > StudentCounter; i++) имеет неправильный <и никогда не будет работать (линии. Длина, которая является StudentCounter, всегда будет> = 0)

Вы можете использовать studentArray.Length, или foreach l oop для итерации по этому массиву вместо передачи StudentCounter.

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