@md5inj
Junior Frontend, Delphi, c++

Как работает AddAfter LinkedList c#?

static void readFile(LinkedList<rivers> q)
        {
            StreamReader r = new StreamReader("main.txt");
            rivers a = new rivers();

            a.name = r.ReadLine();
            a.selfPritok = r.ReadLine();
            a.nStran = int.Parse(r.ReadLine());
            q.AddFirst(a);
            
            while (!r.EndOfStream)
            {
                a.name = r.ReadLine();
                a.selfPritok = r.ReadLine();
                a.nStran = int.Parse(r.ReadLine());
                q.AddAfter(q.Last, a);
            }

            write(q);

            r.Close();
        }


write - метод, который выводит двусвязный список

Программа загружает из текстовика базу данных рек
И когда вывожу постоянно добавляется последняя река, которая была в текстовике, помогите пожалуйста
  • Вопрос задан
  • 298 просмотров
Решения вопроса 1
lam0x86
@lam0x86
Во-первых, привыкайте к стандартам code style. Имена классов, методов и свойств должны начинаться с заглавной буквы. Кроме того избегайте транслитерации - пусть лучше это будет кривой английский, чем "pritok" и "nStran". А в вашем случае, rivers должно быть просто River (единственное число).
Во-вторых, у LinkedList есть метод AddLast, который добавляет элемент в конец. AddAfter не нужен тут.
В-третьих, использование LinkedList не оправдано в 99.99% случаев. Есть много материала на эту тему в гугле по запросу "List vs LinkedList performance" (можно поискать на русском "Производительность List и LinkedList").
В-четвёртых, советую почитать про оператор using и обработку исключений. Ваше решение упадёт при некорректных данных в файле.

Но это всё лирика. А проблема у вас в том, что вы создаете объект rivers только один раз, а в цикле изменяете его свойства. Получается, что весь ваш список состоит из множества ссылок на один и тот же объект. Если переименуете класс в River, возможно, поймете свою ошибку.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы