当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《在数组,列表等上使用foreach时的排序顺序》经验,为你挑选了2个好方法。

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

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



1> Powerlord..:

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

首先,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)的自定义类可以实现自己的枚举器,以按照自己喜欢的顺序返回元素.

2> Reed Copsey..:

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


我不同意这里的downvotes.正如我所提到的,有些列表实现不保证顺序.C#中的标准数组以及BCL的List 类确实保证顺序,但原始问题并不仅限于这些......
推荐阅读
mobiledu2402851377
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有