Сообщение об ошибке "Обнаружен недоступный код" 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;
}
Другие вопросы по тегам