当使用foreach迭代数组时,是否有任何保证返回元素的顺序是order数组[0],array [1],array [2],...
我知道这是现在如何实现Array类,但是对于框架的未来版本是否有任何保证?List <>也有同样的问题.
到目前为止,我不得不同意所有的答案.
首先,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)的内容),这意味着将按后备存储存储它们的顺序返回元素.
没有保证.大多数列表/数组实现将按顺序返回值,但肯定有例外,特别是在一些不太常见的集合类中.(例如,在C5中,许多集合以与枚举时添加的顺序非常不同的顺序返回值.)