Список перезаписывает ранее добавленные объекты при добавлении нового объекта - PullRequest
0 голосов
/ 23 декабря 2018

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

Вот фрагмент кода для предисловия, который находится внутри цикла While и вложен в 3 оператора if.

Вопрос : Почему он перезаписывает все остальные записи?

Моя логика работает на 100%. Я провел тесты на нем более 10 часов со многими точками останова. Также, пожалуйста, будьте полегче со мной. Я полупрофессионал в C #

    if (Att == a1)
    {
        Student s1 = new Student();
        s1.Eid = Eid;
        s1.Name = Name;
        s1.Attempt1 = att1;
        AllStudents.Add(s1);
        //AllStudents.Add(new Student(Eid,Name, att1));

        Eid = line;
        Att = "";
        qnum = 1;
        counter = 1;
    }

Вот мой ученикclass

public class Student
    {
        public string Eid { get; set; }
        public string Name { get; set; }
        public string[] Attempt1 { get; set; }
        public string[] Attempt2 { get; set; }
        public string[] Attempt3 { get; set; }
        public string[] Att1filler = { "n/a", "n/a", "n/a", "n/a", "n/a", "n/a" };
        public string[] Att2filler = {"n/a","n/a","n/a","n/a","n/a","n/a"};
        public string[] Att3filler = {"n/a","n/a","n/a","n/a","n/a","n/a"};

        public int FinalGrade { get; set; }
        public int Grade1 { get; set; }
        public int Grade2 { get; set; }
        public int Grade3 { get; set; }
        public int Grade4 { get; set; }

        public Student()
        {
            FinalGrade = 0;
            Attempt1 = Att1filler;
            Attempt2 = Att2filler;
            Attempt3 = Att3filler;
        }
        public Student(string Eagid, string name, string[] Att1)
        {
            Eid = Eagid;
            Name = name;
            Attempt1 = Att1;
            Attempt2 = Att2filler;
            Attempt3 = Att3filler;
            FinalGrade = 0;
        }
        public Student(string Eagid, string name, string[] Att1, string[] Att2)
        {
            Eid = Eagid;
            Name = name;
            Attempt1 = Att1;
            Attempt2 = Att2;
            Attempt3 = Att3filler;
            FinalGrade = 0;
        }
        public Student(string Eagid, string name, string[] Att1, string[] Att2, string[] Att3)
        {
            Eid = Eagid;
            Name = name;
            Attempt1 = Att1;
            Attempt2 = Att2;
            Attempt3 = Att3;
            FinalGrade = 0;
        }
}

И, наконец, так я объявил свой список

 public List<Student> AllStudents = new List<Student>();

, а также AllStudents.add(new Student(Eid,Name, att1)); из другого решения, которое я обнаружил, которое все еще не работает для меня.

1 Ответ

0 голосов
/ 23 декабря 2018

Я понял это.Изучил мой урок передачи по ссылкам против передачи по значению.убедитесь, что ваш алгоритм зацикливается, что все, что инициализируется новым и используется внутри цикла, повторно инициализируется внутри цикла, чтобы вы не просто передавали одну и ту же ссылку для каждого объекта (извините, если этот ответ не равен 100% Я бегу на 2 часа сна, пытаясь сделать этот проект!)

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