Niezliczona ilość i porządek
Mam pytanie dotyczącezamówienie wIEnumerable
.
O ile mi wiadomo, iterowanie przez IEnumerable to pseudo-kod może być napisany w następujący sposób:
<code>while (enumerable.HasNext()) { object obj = enumerable.Current; ... } </code>
Załóżmy teraz, że trzeba działać na aposortowane kolekcja. Czy w tym przypadku można użyć IEnumerable lub lepiej wypróbować inne środki (tj.IList
) z obsługą indeksacji?
Innymi słowy: czy umowa zIEnumerable
w ogóle gwarantować porządek?
Więc,IEnumerable
nie jest właściwym środkiem dla ogólnego interfejsu, który gwarantuje zamawianie. Nowe pytanie dotyczy tego, jaki interfejs lub klasapowinien być używane do niezmiennej kolekcji z zamówieniem?ReadonlyCollection
? IList
? Oba zawierająAdd()
metoda (nawet nie jest zaimplementowana w poprzedniej).
Moje własne myśli:IEnumerable
nie daje żadnych gwarancji dotyczących zamówienia. Prawidłowa implementacja może zwrócić te same elementy w innej kolejności w różnych wyliczeniach (rozważ zapytanie SQL)
Wiem o LINQFirst()
, ale jeśliIEnumerable
nie mówi ani słowa o tym zamówieniu, to rozszerzenie jest całkiem bezużyteczne.