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