这是好还是坏:
foreach (Match match in serverNameRegex.Matches(loginPage))
{
....
}
或者我应该像那样使用它以获得更好的速度:
MatchCollection matches = serverNameRegex.Matches(loginPage);
foreach (Match match in matches)
{
...
}
答案 0 :(得分:6)
只要MatchCollection
不能为空,我就说这是你的选择。
但如果结果为空并且您未事先检查它,则会遇到NullReferenceException
。
答案 1 :(得分:3)
速度没有任何区别。这只是一种风格问题。
在这两种情况下,都会通过IEnumerator
方法创建GetEnumerator()
。这只发生一次。在每个后续循环条目中,只会调用方法MoveNext()
。
答案 2 :(得分:3)
第二个可能是首选,因为:
答案 3 :(得分:3)
我更喜欢后者,尽管它们之间没有区别。因为第二个似乎更清晰,并且您将来可以轻松添加更多。
MatchCollection matches = serverNameRegex.Matches(loginPage);
foreach (Match match in matches)
{
}
//do something to matches in the future
答案 4 :(得分:1)
没有差异,但我说第二个更容易理解,更清晰,更容易阅读第一个。
要检查详细信息,请使用deaasembler或reflator。
如果你想在foreach循环之后使用matches
集合,那么第二个是有用的。
答案 5 :(得分:1)
取决于代码中的更多位置是否需要matches
。我认为使用
foreach (Match match in serverNameRegex.Matches(loginPage))
{
}
因为它会在循环完成后清理变量
答案 6 :(得分:-2)
两者和第一个之间存在速度差异:
foreach (Match match in serverNameRegex.Matches(loginPage))
{
....
}
更快。
原因是,在第一个中,serverNameRegex.Matches(loginPage)被评估一次,for循环已经知道每个匹配值,而在:
MatchCollection matches = serverNameRegex.Matches(loginPage);
foreach (Match match in matches)
{
...
}
循环必须在每次迭代中评估匹配集合。