在数组,列表等上使用foreach时的排序顺序

Jak*_*sen 5 .net arrays foreach

当使用foreach迭代数组时,是否有任何保证返回元素的顺序是order数组[0],array [1],array [2],...

我知道这是现在如何实现Array类,但是对于框架的未来版本是否有任何保证?List <>也有同样的问题.

Pow*_*ord 20

到目前为止,我不得不同意所有的答案.

首先,C#3.0标准保证了数组上foreach的顺序:

foreach遍历数组元素的顺序如下:对于单维数组,元素以递增的索引顺序遍历,从索引0开始并以索引Length - 1结束.对于多维数组,遍历元素这样最右边的尺寸的索引首先增加,然后是下一个左边的尺寸,依此类推到左边.

- C#语言规范版本3.0,第240页.

其次,在对象上,foreach(C#)和For Each(VB.NET)通过在对象()上使用MoveNext,Reset和Current成员来工作.这些通常是IEnumerator接口的一部分.

在具有订单的集合中(读取:实现IList或IList(T)的内容),这意味着将按后备存储存储它们的顺序返回元素.

  • +1,因为这对所有标准数组和列表都是正确的.虽然是迂腐,但实现IList(T)的自定义类可以实现自己的枚举器,以按照自己喜欢的顺序返回元素. (4认同)

Ree*_*sey 5

没有保证.大多数列表/数组实现将按顺序返回值,但肯定有例外,特别是在一些不太常见的集合类中.(例如,在C5中,许多集合以与枚举时添加的顺序非常不同的顺序返回值.)

  • 我不同意这里的downvotes.正如我所提到的,有些列表实现不保证顺序.C#中的标准数组以及BCL的List <T>类确实保证顺序,但原始问题并不仅限于这些...... (4认同)