Сообщение об ошибке "Обнаружен недоступный код" C-Sharp
Почему компилятор выдает сообщение об ошибке "недоступный код"? Я хотел бы уменьшить целочисленную переменную nbElements
с -1 в этом связанном списке.
public object Pop()
{
if (StackEmpty())
throw new Exception("Error: No nodes to pop from stack");
object RemoveItem = headNode.Data;
if (headNode == tailNode)
headNode = tailNode = null;
else
headNode = headNode.Next;
return RemoveItem;
nbElements--; //Here is where the problem is
}
3 ответа
Если у вас есть оператор return, функция вернется, и любой код в функции после оператора return будет недоступен.
Простое решение состоит в том, чтобы изменить вашу функцию так, чтобы возвращение было последней строкой в вашей функции.
public object Pop()
{
if (StackEmpty())
throw new Exception("Error: No nodes to pop from stack");
object RemoveItem = headNode.Data;
if (headNode == tailNode)
headNode = tailNode = null;
else headNode = headNode.Next;
nbElements--;
return RemoveItem;
}
Кстати, обычно считается хорошей практикой использовать фигурные скобки вокруг блоков if. Хотя это и не является строго необходимым, оно дает четкое представление о том, что будет выполнено после условного выражения, и помогает избежать добавления кода, который не будет выполняться должным образом. Вот как это должно выглядеть:
public object Pop()
{
if (StackEmpty())
{
throw new Exception("Error: No nodes to pop from stack");
}
object RemoveItem = headNode.Data;
if (headNode == tailNode)
{
headNode = tailNode = null;
}
else
{
headNode = headNode.Next;
}
nbElements--;
return RemoveItem;
}
По крайней мере, код отступа!
headNode = headNode.Next;
идет в другом, но
return RemoveItem;
не в другом, поэтому он возвращается. метод останавливается и
nbElements--;
недоступен
так что вы можете просто поменять "return RemoveItem;" и "nbElements--;"
Ваш код должен выглядеть так:
public object Pop()
{
if (StackEmpty())
throw new Exception("Error: No nodes to pop from stack");
object RemoveItem = headNode.Data;
if (headNode == tailNode)
headNode = tailNode = null;
else headNode = headNode.Next;
nbElements--;
return RemoveItem;
}