错误消息“检测到无法访问的代码”C-Sharp

时间:2014-09-25 16:16:28

标签: c# decrement

为什么编译器会给出错误消息“无法访问的代码”? 我想在此链表中使用-1减去整数变量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;

    return RemoveItem;
    nbElements--;                 //Here is where the problem is
}

3 个答案:

答案 0 :(得分:5)

headNode = headNode.Next;

进入其他地方,但是

return RemoveItem;

不在其他地方,所以它返回。方法停止和

nbElements--; 

无法访问


所以,你可以只交换“return RemoveItem;”和“nbElements - ;”

答案 1 :(得分:0)

如果你有一个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;        
}

至少,缩进代码!

答案 2 :(得分:0)

您的代码应如下所示:

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;
}