【问题标题】:Unreachable Code Detected Warning with Regex使用正则表达式检测到无法访问的代码警告
【发布时间】:2015-08-02 13:31:27
【问题描述】:

我对 C# 还很陌生,感觉这可能是一个显而易见的答案,因为我理解错误的含义——但我终生无法看到如何修复它!我的第二个 if 语句收到“检测到无法访问的代码”警告,所以我意识到它没有被调用,我只是不明白我的错误在哪里,或者如何修复它。任何帮助将不胜感激!

我遇到问题的代码的 sn-p 是:

bool valid = true;
if (txtFirst.Text.Length < 1 || txtLast.Text.Length < 1 || txtAddress.Text.Length < 1 || txtCity.Text.Length < 1 || txtState.Text.Length < 1)
{
    return false;
}

string usZip = @"^\d{5}$|^\d{5}-\d{4}$";
Regex re = new Regex(usZip);

return re.IsMatch(txtZip.Text);

if (re.IsMatch(txtZip.Text))
    return (true);
else
    return (false);
return valid;
valid = false; 

【问题讨论】:

  • 您将无条件返回第二个 if 语句的正上方:return re.IsMatch(txtZip.Text);。任何低于该回报的东西都不会达到。
  • 我已经编辑了你的标题。请参阅“Should questions include “tags” in their titles?”,其中的共识是“不,他们不应该”。

标签: c# unreachable-code


【解决方案1】:

在第二个 if 语句之前有一个 return 语句:

return re.IsMatch(txtZip.Text);

所以下面的代码永远不会执行。

此外,您的第二个 if 下方还有无法访问的代码,因为该 if 语句在任何一种情况下都会返回一个值,所以:

return value;
valid=false;

也永远不会执行。

【讨论】:

    【解决方案2】:

    如果你想检查所有字段应该是字段,然后如果 ZIP 匹配模式返回 TRUE 否则 FALSE 下面的代码就足够了..

    因为 if/else 之前的 return 语句是代码无法访问的原因。因为该 return 将始终具有 true OR false 值来返回,所以它永远不会达到IF/ELSE条件..

    我认为下面的代码是你想要的......检查一下......

        if (txtFirst.Text.Length < 1 || txtLast.Text.Length < 1 || txtAddress.Text.Length < 1 || txtCity.Text.Length < 1 || txtState.Text.Length < 1)
        {
            return false;
        }
    
        string usZip = @"^\d{5}$|^\d{5}-\d{4}$";
        Regex re = new Regex(usZip);
        return re.IsMatch(txtZip.Text);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-27
      • 2016-09-03
      • 2023-03-13
      • 2021-09-18
      • 1970-01-01
      • 1970-01-01
      • 2011-05-09
      相关资源
      最近更新 更多