我想知道 C# 中的 foreach 循环循环的顺序System.Collections.Generic.List<T>
object.
I found 另一个问题 https://stackoverflow.com/questions/678162/sort-order-when-using-foreach-on-an-array-list-etc关于同一主题,但我觉得它不能令我满意地回答我的问题。
有人说没有定义顺序。但正如其他人所说,它遍历数组的顺序是固定的(从 0 到 Length-1)。8.8.4 foreach 语句 http://msdn.microsoft.com/en-us/library/aa664754(VS.71).aspx
也有人说,这同样适用于任何有订单的标准类别(例如List<T>
)。我找不到任何文档来支持这一点。因此,据我所知,它现在可能会像这样工作,但也许在下一个 .NET 版本中它会有所不同(尽管这可能不太可能)。
我也看过List(t).Enumerator http://msdn.microsoft.com/en-us/library/x854yt9s.aspx没有运气的文档。
另一个相关问题 https://stackoverflow.com/questions/1376934/java-for-each-loop-sort-order声明对于Java,文档中特别提到:
List.iterator()
返回此列表中元素的迭代器
按正确的顺序。”
我正在 C# 文档中寻找类似的内容。
提前致谢。
编辑:谢谢大家的所有回答(令人惊讶的是我这么快就收到了这么多回复)。我从所有答案中了解到的是List<T>
总是按照其索引的顺序进行迭代。但我仍然希望看到明确的文档说明这一点,类似于Java 文档上List http://java.sun.com/javase/6/docs/api/java/util/List.html#iterator().
基本上这取决于IEnumerator
实施 - 但对于List<T>
它始终按照列表的自然顺序排列,即与索引器的顺序相同:list[0]
, list[1]
, list[2]
etc.
我不相信它有明确的记录 - 至少,我还没有找到这样的文档 - 但我认为你可以将其视为保证。对该顺序的任何更改都会毫无意义地破坏各种代码。事实上,我会惊讶地看到任何实施IList<T>
这违反了这一点。诚然,很高兴看到它被专门记录......
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)