2011-01-19 125 views
2

警告我有以下如何避免可达代码

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()循环。

如何克服这一点?

感谢

回答

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 : ""; 

我个人认为这是相当清晰的,在什么样的“货币”的最终版本是条款。

5

也许我失去了一些东西,但为什么你甚至使用一个循环吗?为什么不直接使用r.Match(表达式)?

如果你在第一次迭代中总是会跳出循环,那么有一点循环。

2

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

If(currency<0){break;} 

使用您希望发生“中断”的适当条件。这应该会帮助你很好。

问候

1

如何避免警告约可达代码的一般规则,就是不写可达代码。

让我们来看看你写的:

  1. 环路
  2. 在循环中的每个条目,提取一组的值,再破下一个循环
  3. 转到,不,我们永远不会到这里

整个循环是不必要的。

相反,这就够了:目前

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; 
0

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