2014-09-25 107 views
-3

为什么编译器会提供errormessage“无法访问的代码”? 我想用这个链表中的-1来递减整型变量nbElements错误信息“检测到无法到达的代码”C-Sharp

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

你'return'递减变量之前? – Vache 2014-09-25 16:17:53

+0

你不能在这样的回报之后有一个声明。这是“无法访问的代码” – 2014-09-25 16:19:24

+0

如果您希望在其他语句中执行多个语句,则在if语句中包含条件语句{else} {} else'lzay formatting'关于代码块' – MethodMan 2014-09-25 16:20:53

回答

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

至少,缩进代码!

+0

IMO,good practice只是为if和else中的单行命令添加表格。大括号是不必要的 – lenden 2014-09-25 16:27:34

+0

@lenden不必要的,但它使得它完全清楚作为if语句的一部分被执行,并减少了稍后引入错误的可能性。当然,如果你是一个体面的程序员,那么缩进可能就足够了。但对于新人(正如OP显然),添加大括号可以在以后节省许多麻烦。 – mason 2014-09-25 16:30:05

+0

很难不同意:) – lenden 2014-09-25 16:33:21

5
headNode = headNode.Next; 

进去人,但

return RemoveItem; 

不一样,所以它返回。方法停止和

nbElements--; 

不可达


所以,你可以换用 “返回的removeItem;”和“nbElements--;”

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; 
} 
相关问题