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