【问题标题】:Unreachable Code Detected检测到无法访问的代码
【发布时间】:2011-05-09 12:58:42
【问题描述】:

我即将部署一个我负责管理的 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”行抛出了无法访问的代码警告。

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

【问题讨论】:

    标签: asp.net warnings unreachable-code


    【解决方案1】:

    您的if 条件始终计算为true (if (true)),因此此方法等效于:

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

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

    【讨论】:

    • 感谢@Darin 的回复。这是有道理的。您认为可以在发出此警告的情况下继续部署吗?
    • 在这种特殊情况下是可以的。但是从代码的可读性和维护的角度来看,我不会离开它。因此,如果您有权访问源代码,请对其进行修改。它不会花费太多时间,它会删除不必要的代码,并且您需要担心的代码越少:-)
    【解决方案2】:

    达林说的。

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

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

    【讨论】:

      【解决方案3】:

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

      无法访问代码的问题在于它可能会暴露一个错误。

      也许程序员真正的意思不是if(something-that's-always-true),而是if(something-else-that's-sometimes-false)。在这种情况下,您可能必须修复条件。或者,该错误实际上可能是一个“功能”,现在用户已经开始欣赏并更改它可能会让他们感到不安。

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

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

      【讨论】:

        猜你喜欢
        • 2010-12-01
        • 1970-01-01
        • 1970-01-01
        • 2014-05-22
        • 1970-01-01
        • 1970-01-01
        • 2018-09-21
        • 2017-01-02
        相关资源
        最近更新 更多