2014-09-25 43 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; 
} 
相關問題