2014-07-14 60 views
2

.NET標準庫中的幾個可用集合旨在保持內部項目的順序 - 例如List,LinkedList,QueueStack。另一方面,其他人則以其他方式安排物品,如DictionaryHashSetOrdered enumeration

我的問題是:如果一個容器保持特定順序(按順序)的元素,是保證,通過這個容器枚舉最初將按順序?

例如,我想列舉相反的順序列表中的項目。最簡單的方法就是寫:

foreach (var item in list.Reverse<type>()) { ... } 

但是,只有當初始枚舉經過收集的物品在儲存它們的秩序,將工作。如果沒有這樣的保證,我可能應該用其他方式編寫代碼:

for (int i = list.Count - 1; i >= 0; i--) { ... } 

其中實際上較短,但可讀性較差。

注意:我知道,該列表實際上按順序列舉項目,直覺說,所有有序的容器都會做同樣的事情。但是如果它沒有被框架保證,.NET 5.0可能會引入枚舉(例如)更有效的方式,但會破壞項目的順序。


MSDN docs表明,該訂單是通過使用術語如和「集合中第一個元素之前」「移動到集合中的下一個元素」不斷。但足以說,訂單是保證

回答

1

我不認爲任何人(甚至微軟)都可以保證未來軟件的行爲方式。但是,鏈接到的MSDN頁面說:「例如,ArrayList的枚舉器保留元素在集合中的輸入順序。」 List<T>是一個有序的列表,我會說一個枚舉符返回的順序是壞的項目。我認爲你可以安全地使用Reverse<T>。請記住,對列表的任何更改都會使您的枚舉器失效。確保您列舉的枚舉時不會被其他線程修改。

相關問題