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

时间:2009-03-24 16:26:04

标签: .net arrays foreach

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

我知道现在是如何实现Array类的,但是对于框架的未来版本是否有任何保证?列表<&gt ;.

也有同样的问题

3 个答案:

答案 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用于无序枚举,并暗示运行时甚至可以并行处理多个元素。你永远不应该依赖任何枚举顺序。