当使用foreach迭代数组时,是否有任何保证返回元素的顺序是order数组[0],array [1],array [2],...
我知道现在是如何实现Array类的,但是对于框架的未来版本是否有任何保证?列表<&gt ;.
也有同样的问题答案 0 :(得分:20)
到目前为止,我不得不同意所有答案。
首先,C#3.0标准保证了数组中foreach的顺序:
foreach遍历的顺序 数组的元素是 如下:对于一维数组 元素越来越多 索引顺序,从索引0开始 以索引长度结束 - 1.对于 多维数组,元素是 遍历了这样的指数 最右边的尺寸增加了 首先,然后是下一个左维, 等等在左边。
- C# Language Specification Version 3.0,第240页。
其次,对象,foreach(C#)和For Each(VB.NET)通过在对象(source)上使用MoveNext,Reset和Current成员来工作。这些通常是IEnumerator接口的一部分。
在有订单的集合中(读取:实现IList或IList(T)的东西),这意味着元素将按后备存储存储它们的顺序返回。
答案 1 :(得分:5)
没有保证。大多数列表/数组实现将按顺序返回值,但肯定有例外,特别是在一些不太常见的集合类中。 (例如,在C5中,许多集合以非常不同的顺序返回值,而不是枚举时添加的值。)
答案 2 :(得分:0)
无法保证设计。 foreach用于无序枚举,并暗示运行时甚至可以并行处理多个元素。你永远不应该依赖任何枚举顺序。