views:

486

answers:

3

Does a List<T> always guarantee that items will be returned in the order they were added when enumerated?

Updated: Thanks for all the answers folks, puts my mind at ease. I had a quick poke around the List<T> class with .NET Reflector (should've probably done that in the first place) and indeed the underlying store is an array of T (T[]).

Cheers
Kev

+2  A: 

Yes according to this MSDN Forum thread

Spencer Ruport
+1  A: 

Yes. But it's not part of the specification.

Mitch Wheat
In that case, depending on this particular implementation detail would be a bug, no?
Cheeso
I can't find a reference for this, can you cite one?
annakata
+7  A: 

The List is index based and new items will always be added to the end of the list. You can insert items at a certain index so the next items will move one position.

So yes, you can use it safely that way...

The List(T) class is the generic equivalent of the ArrayList class. It implements the IList(T) generic interface using an array whose size is dynamically increased as required.

Elements in this collection can be accessed using an integer index. Indexes in this collection are zero-based.

The List(T) is not guaranteed to be sorted. You must sort the List(T) before performing operations (such as BinarySearch) that require the List(T) to be sorted.

A List(T) can support multiple readers concurrently, as long as the collection is not modified. Enumerating through a collection is intrinsically not a thread-safe procedure. In the rare case where an enumeration contends with one or more write accesses, the only way to ensure thread safety is to lock the collection during the entire enumeration. To allow the collection to be accessed by multiple threads for reading and writing, you must implement your own synchronization.

You can read more about it on MSDN.

Sander Versluys
It seems that the doc for List<T> does not state that the order of retrieval is the same as the order of insertion. It does behave that way, for now, but it is not documented to do so.
Cheeso
that's indeed correct, it is always good to be conscious about that, and when it's absolutely critical, to not count on it!
Sander Versluys