c# - foreach循环-良好实践
本文关键字:循环 foreach | 更新日期: 2023-09-27 18:17:06
这是好是坏:
foreach (Match match in serverNameRegex.Matches(loginPage))
{
....
}
或者我应该这样使用以获得更好的速度:
MatchCollection matches = serverNameRegex.Matches(loginPage);
foreach (Match match in matches)
{
...
}
只要MatchCollection
不能为空,我认为这是你的选择。
但是如果结果为null并且您没有事先检查它,您将遇到NullReferenceException
无论如何,速度都没有差别。这只是风格的问题。
在这两种情况下,将通过GetEnumerator()
方法创建IEnumerator
。这种情况只发生一次。在随后的每个循环条目中,只调用方法MoveNext()
。
我更喜欢后者,尽管它们之间没有区别。因为第二句似乎更清楚,以后可以很容易地添加更多。
MatchCollection matches = serverNameRegex.Matches(loginPage);
foreach (Match match in matches)
{
}
//do something to matches in the future
第二个可能是首选,因为:
- 你可以很容易地在它之后发送一个断点来跟踪它(调试)
- 如果你需要做一个改变,你也没有改变循环(不应该受到影响)。
- 更容易阅读
- 如果你想在循环之前添加验证,必须
这没有什么区别,但我认为第二个比第一个更容易理解,更清晰,更容易阅读。
要检查详细信息,请使用反汇编器或再编译器。
如果您想在foreach循环之后使用matches
collection,
取决于您是否需要在代码中的更多位置使用matches
。我认为使用
foreach (Match match in serverNameRegex.Matches(loginPage))
{
}
因为它会在循环结束后清理变量
两者之间的速度有差异:
foreach (Match match in serverNameRegex.Matches(loginPage))
{
....
}
更快。
原因是,在第一个中,serverNameRegex.Matches(loginPage)被求值一次,并且for循环已经知道每个匹配值,而在
中: MatchCollection matches = serverNameRegex.Matches(loginPage);
foreach (Match match in matches)
{
...
}
循环必须在每次迭代中计算匹配集合。