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