2011-01-19 97 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() 如果表達式匹配,你將得到相同的迭代組。因此請修改用於掃描所需組值的代碼。