Так что мой код в основном создает связанный список. Каждый объект билета либо сохраняет ссылку на другой объект билета, либо null. Метод .getNext() получает ссылку на следующий объект в списке. current - это объект, представляющий начало списка, а циклы while проходят через список, изменяющий ток до тех пор, пока условия не изменятся. Наконец, он устанавливает ток в Билет, который был передан как параметр.Я получаю исключение NullReferenceException, но объект не является нулевым
public void AddLowPTicket(Ticket ti) // doesnt check if front == null because AddTicket already does
{
Ticket current = front;
while(current.getPrio() == Priority.High && current != null) // cycles/skips through the list as long as Priority == High.
{
current = current.getNext();
}
current.Print(); // *THIS WORKS*
while(current != null && current.getPrio() == Priority.Low) // *NullReferenceException: Obj ref not set to an instance of an obj.*
{
current = current.getNext();
}
current = ti;
}
Это метод печати объекта Билета. Он печатает локальные переменные просто отлично, а это значит, что они не равны нулю.
public void Print()
{
Console.WriteLine("{0}\nPriority:{1}", m_description, m_prio == Priority.High ? "High" : "Low");
}
Почему он падает, если ток не равен нулю, и ни одна из его переменных не является.
'current.getPrio() == Priority.High && current! = Null' Попробуйте поменять местами влево и вправо. – AlexD
@AlexD: Как это решит проблему? @ N.Campos: что происходит внутри 'getPrio()' –
Вы уверены, что это происходит на линии, о которой вы говорите? Похоже, что это, вероятно, происходит на первом 'while' - это будет решено комментарием AlexD. Что говорит ваш отладчик? Подождите, пока он попадет в исключение и проверит соответствующие переменные. – Rob