我有以下
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()循环。
如何克服这个问题?
由于
答案 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)
关于如何避免无法访问代码警告的一般规则是不写无法访问的代码。
让我们来看看你写的内容:
整个循环是不必要的。
相反,这就足够了:
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() 如果表达式匹配,您将获得相同的迭代组。因此,请修改用于扫描组以获取所需值的代码。