![]() |
1
32
对于C#:
VB.NET的答案来自 紫蚁 :
|
![]() |
2
21
对于IEnumerable的任何通用实现,最好的方法是:
然而,有一个重要的例外。IEnumerable涉及Currents()和MoveNext()的开销,这是foreach循环实际编译的内容。 当你有一个简单的结构数组时:
更快。 更新 在与@Steven Sudit讨论后(见评论),我认为我最初的建议可能已经过时或错误,所以我做了一些测试:
因此,我在发布时进行了所有优化:
然后调试而不进行优化:
因此,它看起来相当一致,
然而,这涉及100000000次迭代,最快和最慢方法之间的差异约为0.4秒。除非你正在进行大规模的性能关键循环,否则不值得担心。 |
![]() |
3
5
C
匿名委托目前尚未在VB.Net中实现,但C#和VB.Net都应该能够执行lambdas: C
VB.Net
正如Grauenwolf所指出的,由于lambda不返回值,上述VB无法编译。像其他人建议的那样,一个正常的ForEach循环可能是目前最简单的,但像往常一样,它需要一段代码来完成C#在一行中可以完成的事情。 这里有一个老生常谈的例子,说明为什么这可能有用:这使您能够从IEnumerable存在的另一个作用域传递循环逻辑,因此如果您不想公开它,甚至不必公开它。 假设你有一个相对url路径列表,你想将其设置为绝对路径:
所以你可以这样调用函数:
给你
|
![]() |
4
4
对于VB.NET:
|
![]() |
5
2
在不知道列表的内部实现的情况下,我认为通常迭代它的最佳方法是foreach循环。因为foreach使用IEnumerator遍历列表,所以如何从一个对象移动到另一个对象取决于列表本身。 如果内部实现是一个链表,那么简单的for循环会比foreach慢得多。 这有道理吗? |
![]() |
6
2
这取决于您的应用程序:
|
![]() |
7
1
我可能遗漏了一些东西,但如果你使用我下面的例子,迭代一个通用列表应该相当简单。名单<>类实现了IList和IEnumerable接口,因此您可以轻松地以任何方式迭代它们。 最有效的方法是使用for循环:
您也可以选择使用foreach循环:
|
![]() |
A B · C#Excel自动调整列避免长文本时出错 5 月前 |
![]() |
pseudodev · 失败的测试仅显示堆栈跟踪,不显示完整日志 5 月前 |
![]() |
CactusCake · if语句中应有分号 6 月前 |
![]() |
Bin4ry · 子文件夹中的应用程序设置 7 月前 |