У меня есть вопрос о заказе в IEnumerable
.
Насколько я знаю, перебор IEnumerable - это псевдокод, который можно записать следующим образом:
while (enumerable.HasNext())
{
object obj = enumerable.Current;
...
}
Теперь предположим, что нужно работать с отсортированной коллекцией. Можно ли в этом случае использовать IEnumerable или лучше попробовать другие средства (например, IList
) с поддержкой индексации?
Другими словами: дает ли контракт IEnumerable
какие-либо гарантии о заказе в целом?
Итак, IEnumerable
не является подходящим средством для универсального интерфейса, который гарантирует порядок. Новый вопрос: какой интерфейс или класс следует использовать для неизменяемой коллекции с порядком? ReadonlyCollection
? IList
? Оба они содержат метод Add()
(даже не реализован в предыдущем).
Мои собственные мысли: IEnumerable
не дает никаких гарантий по поводу заказа. Правильная реализация может возвращать одни и те же элементы в разном порядке в разных перечислениях (рассмотрим запрос SQL)
Я знаю о LINQ First()
, но если IEnumerable
не говорит ни слова об упорядочивании, это расширение довольно бесполезно.