2

我正准备部署一个我负责管理的 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”行会引发无法访问的代码警告。

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

4

3 回答 3

3

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

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

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

于 2010-11-13T13:55:02.747 回答
1

达林说的。

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

您可以尝试return null将. 它仍然永远不会执行,但如果你改变了to ,你仍然会有正确的代码。您也可以通过这种方式摆脱警告。elseiftrueiffalse

于 2010-11-13T14:00:43.010 回答
0

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

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

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

Or maybe they really meant to use the if(something-that's-always-true) but didn't realize it always evaluated to true, so they wrote the unreachable code "just in case". In that case, you probably just delete the unreachable code.

I'm sure there are other reasons for unreachable code.

于 2010-11-13T14:20:25.940 回答