检测到无法访问的代码

时间:2010-11-13 13:54:22

标签: asp.net warnings unreachable-code

我准备好部署一个我负责管理的MVC Web应用程序(我没有创建应用程序)。该项目现在正在生产模式下编译,没有错误,但我有一些警告 - 准确地说是9。

现在6与测试项目有关,这很好,但是有两个涉及Web项目。这些错误是:

  

检测到无法访问的代码

在这两种情况下,这些警告都会抛出返回值,例如

protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
    if (true)
    {
        return new ValidationResult("Passwords don't match", new string[] { OriginalProperty });
    }

    return null;
}

在上面的示例中,“return null”行会抛出无法访问的代码警告。

这可能是一个愚蠢的问题(所以请放轻松;-)),但这些警告对应用程序的功能有多重要?显然他们是有原因的,但他们不是错误,所以我可以相对好地忽略它们并进行部署吗?

3 个答案:

答案 0 :(得分:3)

您的if条件始终评估为trueif (true)),因此此方法等同于:

protected override ValidationResult IsValid(object value, 
    ValidationContext validationContext)
{
    return new ValidationResult("Passwords don't match", 
        new string[] { OriginalProperty });
}

这就是你得到编译器警告的原因。返回null的最后一行永远不会被命中。就忽略警告而言,我建议你永远不要忽视它们。在某些情况下,警告可能会在运行时导致意外行为。就个人而言,我已经检查了VS中的选项,该选项将警告视为错误,以确保不会错过任何警告。

答案 1 :(得分:1)

达林说的话。

此特定警告不会影响执行时间,性能或可靠性。但是,我试图摆脱警告,以便在开发过程中,我没有警告信息让我(作为开发人员)分散其他可能重要且相关的消息。

您可以尝试将return null放入else新创建的if分支中。它仍然永远不会执行,但如果您将true中的if更改为false,您仍然会拥有正确的代码。你也可以通过这种方式摆脱警告。

答案 2 :(得分:0)

您可以安全地删除无法访问的代码,而无需更改程序当前的工作方式。

无法访问代码的问题在于它可能会显示错误。

而不是if(something-that's-always-true),程序员可能真的意味着if(something-else-that's-sometimes-false)。在这种情况下,您可能需要修复条件。或者,这个bug实际上可能是一个“功能”,因为用户已经开始欣赏并改变它可能会让他们感到不安。

或许他们真的打算使用if(something-that's-always-true)但是没有意识到它总是被评估为真,所以他们编写了无法访问的代码“以防万一”。在这种情况下,您可能只是删除无法访问的代码。

我确信还有其他无法访问代码的原因。