如何修复错误:“检测到无法访问的代码”?

7

我有以下代码:

private string GetAnswer()
{
   ....
}

private int CountLeapYears(DateTime startDate)
{
    return count;
    String answer = GetAnswer();
    Response.Write(lblAntwoord); 
}

我为什么会得到错误信息:

检测到无法达到的代码

这个错误显示在以下一行:String answer = GetAnswer();

4个回答

36

这只是因为您的代码出现在return语句之后。

return语句会终止出现它的方法的执行并将控制权返回给调用该方法的方法。它还可以返回一个可选值。如果方法是void类型,则可以省略return语句。

如果return语句在try块内部,则将在控制权返回调用方法之前执行finally块(如果存在)。

http://msdn.microsoft.com/en-us/library/1h3swy84%28v=vs.100%29.aspx

解决方案(显而易见):

将不可达代码移至return语句之前。


9

无法访问的代码是编译器的“警告”,而不是错误。你有三个选项:

它是无法访问的,因为方法的流程在return语句处退出,因此永远不会执行下面的代码。编译器可以确定这一点,并且会对其进行报告。正如我所说,这些实际上是编译器的“警告”,除非你配置了项目来将警告视为错误,否则不会阻止成功构建。


2

这个语句:

return count;

退出函数。因此,

answer = GetAnswer(); 
Response.Write(lblAntwoord);  

无法访问。


0
return语句终止函数的执行并将控制返回给调用函数。在调用函数中,执行在调用语句的下一条语句处恢复执行。
如果函数定义中没有出现return语句,则在被调函数的最后一条语句执行完后自动返回控制给调用方。
在您的代码中:
private int CountLeapYears(DateTime startDate)
{
    int count = 0;
    for (int year = startDate.Year; year <= DateTime.Now.Year; year++)
    {
        if (DateTime.IsLeapYear(year))
        {
            DateTime february29 = new DateTime(year, 2, 29);
            if (february29 >= startDate && february29 <= DateTime.Now.Date)
            {
                count++;
            }
        }
    }
    return count;//The Execution will be terminated here,the next lines will become unreachable 
    **String** answer = GetAnswer();
    Response.Write(lblAntwoord); 
}
}

MSDN链接:

C语言:https://msdn.microsoft.com/zh-cn/library/sta56yeb.aspx

C#语言:https://msdn.microsoft.com/zh-cn/library/1h3swy84.aspx


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接