IEnumerable and order
.net, c#, collections, ienumerable
Solution
`IEnumerable/IEnumerable<T>` makes no guarantees about ordering, but the implementations that use `IEnumerable/IEnumerable<T>`may or may not guarantee ordering.
For instance, if you enumerate `List<T>`, order is guaranteed, but if you enumerate `HashSet<T>` no such guarantee is provided, yet both will be enumerated using the `IEnumerable<T>` interface.
Problem
I have got a question about the order in `IEnumerable`. As far as I am aware, iterating through IEnumerable is pseudo-code can be written in the following way: ``` while (enumerable.HasNext()) { object obj = enumerable.Current; ... } ``` Now, assume, that one needs to operate on a sorted collection. Can IEnumerable be used in this case or is it better to try other means (i.e. `IList`) with indexation support? In other words: does the contract of `IEnumerable` make any guarantees about the order in general? So, `IEnumerable` is not a proper mean for a generic interface that guarantees ordering. The new question is what interface or class should be used for an immutable collection with order? `ReadonlyCollection`? `IList`? Both of them contain `Add()` method (even is not implemented in the former one). My own thoughts: `IEnumerable` does not provide any guarantees about the ordering. The correct implementation could return same elements in different order in different enumerations (consider an SQL query) I am aware of LINQ `First()`, but if `IEnumerable` does not say a word about it's ordering, this extension is pretty useless.