Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Не могу удалить объект C#

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, которая выводила весь лист. Но из-за того что я не менял длину, функция пыталась перейти к объекту, которого и не существовало
Голосование за лучший ответ
♡$ⴎG@r₱u₷sყ♡ Искусственный Интеллект (157223) 9 месяцев назад
Проверь, не пытаешься ли ты удалять элемент из пустого списка или списка с одним элементом. В таких случаях `el` будет `null` и ты получишь `NullReferenceException`. Добавь проверки на `Length` в начале функции.
Jurijus Zaksas Искусственный Интеллект (445855) 9 месяцев назад
>И так, я через минуту осознал, какой я дурак.
Не работай со списками циклом со счетчиком. Весь смысел списков (когда-то был) в том, что количество элементов в них априори неизвестно и обрабатываются они путем прохода по ним циклом с предусловием. Тогда и ошибки такие возникать не будут.
Похожие вопросы