Dart Vayder
Профи
(591),
на голосовании
8 месяцев назад
Делаю свой лист. В листе есть приватный класс Element, который хранит значение элемента и ссылку на следующий элемент.
private class Element { public T ThisEl { get; set; } public Element NextEl { get; set; } }
Когда вызывается функция pop_back (которая удаляет последниё элемент), я делаю так чтобы ссылка на объект терялась, а дальше сборщик мусора съест.
public void pop_back() { Element el = first; for(int i = 0; i < Length - 2; i++) { el = el.NextEl; } el.NextEl = null; }
Но выскакивает ошибка (при запуске, в компиляторе всё хорошо):
Необработанное исключение: System.NullReferenceException: Ссылка на объект не указывает на экземпляр объекта.
Помогите решить проблему. Пробовал менять на default, не сработало
Дополнен 9 месяцев назад
И так, я через минуту осознал, какой я дурак. В Main, была функция ToString, которая выводила весь лист. Но из-за того что я не менял длину, функция пыталась перейти к объекту, которого и не существовало
Проверь, не пытаешься ли ты удалять элемент из пустого списка или списка с одним элементом. В таких случаях `el` будет `null` и ты получишь `NullReferenceException`. Добавь проверки на `Length` в начале функции.
>И так, я через минуту осознал, какой я дурак. Не работай со списками циклом со счетчиком. Весь смысел списков (когда-то был) в том, что количество элементов в них априори неизвестно и обрабатываются они путем прохода по ним циклом с предусловием. Тогда и ошибки такие возникать не будут.