如何避免无法访问代码的警告

时间:2011-01-19 10:30:57

标签: c#

我有以下

string currency = string.Empty;
Regex r = new Regex(@"~(\w*[a-zA-Z0-9$£~%]+)", RegexOptions.IgnoreCase | RegexOptions.Compiled);
for (Match m = r.Match(expression); m.Success; m = m.NextMatch())
{
      currency = (m.Groups[1].Value);
      break;
}
return currency;

强调是,在循环中的第一个匹配之后,它应该会中断。

警告消息(无法访问的代码)正在发生 m = m.NextMatch()循环。

如何克服这个问题?

由于

5 个答案:

答案 0 :(得分:5)

也许我错过了什么,但为什么你甚至在这里使用循环呢?为什么不直接使用r.Match(表达式)?

如果你在第一次迭代中总是突破它,那么有一个循环是没有意义的。

答案 1 :(得分:2)

你正在使用'break;'没有任何条件。这将导致循环第一次刹车。因此,增量部分'm = m.NextMatch()'即使一次也不会执行,您将收到警告。尝试使用if条件,如下所示:

If(currency<0){break;}

使用您希望“中断”发生的正确条件。这应该可以帮到你。

此致

答案 2 :(得分:2)

您的代码目前基本上已损坏。你真的永远不会执行m = m.NextMatch(),为什么要这样做?

我想你想要:

Regex r = new Regex(@"~(\w*[a-zA-Z0-9$£~%]+)",
                    RegexOptions.IgnoreCase | RegexOptions.Compiled);

Match m = r.Match(expression);
string currency = m.Success ? m.Groups[1].Value : "";

我个人认为就“货币”的最终版本来说,这是相当清楚的。

答案 3 :(得分:1)

关于如何避免无法访问代码警告的一般规则是不写无法访问的代码。

让我们来看看你写的内容:

  1. 循环
  2. 对于循环中的每个条目,提取组的值,然后中断循环
  3. 转到下一个,错误..不,我们永远不会到这里
  4. 整个循环是不必要的。

    相反,这就足够了:

    string currency = string.Empty;
    Regex r = new Regex(@"~(\w*[a-zA-Z0-9$£~%]+)", RegexOptions.IgnoreCase | RegexOptions.Compiled);
    Match m = r.Match(expression);
    if (m.Success)
        currency = (m.Groups[1].Value);
    return currency;
    

答案 4 :(得分:0)

我认为你不必使用m = m.NextMatch() 如果表达式匹配,您将获得相同的迭代组。因此,请修改用于扫描组以获取所需值的代码。