2009-03-24 14 views

Odpowiedz

20

Nie zgadzam się z wszystkimi dotychczasowymi odpowiedziami.

pierwsze średnia C# 3.0 zapewnia kolejność foreach w tablicy:

Kolejność foreach przechodzi elementów macierzy, jest następujący sposób: W przypadku pojedynczych-wymiarowej macierzy elementami wykonują ruch w zwiększaniu Palec, wychodząc z indeksem 0 i kończąc wskaźnik długości - 1. w tablic wielowymiarowych elementy ruch tak, że indeksy skrajnej prawej wymiar zwiększa pierwszy następnie następny lewy wymiar, itd. po lewej stronie.

- C# Language Specification Version 3.0, strona 240.

drugie, na obiektach, foreach (C#) i dla każdego (VB.NET) praca przy użyciu MoveNext, reset i Obecni członkowie na obiekcie (source). Są one zazwyczaj częścią interfejsu IEnumerator.

W kolekcjach, które mają zlecenie (czytaj: rzeczy, które implementują IList lub IList (T)), oznacza to, że elementy zostaną zwrócone w kolejności, w której magazyn zapasowy je przechowuje.

+4

+1, ponieważ jest to poprawne dla wszystkich standardowych tablic i list. Choć jest to pedantyczny, niestandardowa klasa implementująca IList (T) może implementować własny moduł wyliczający, aby zwracać elementy w dowolnej kolejności. – Joe

+0

Doskonale! Dzięki. Właśnie wygrałem zakład przeciwko koledze :) –

+1

Dotyczy to Array, ale niekoniecznie w przypadku innych kolekcji. –

5

Nie ma żadnych gwarancji. Większość implementacji list/tablic zwraca wartości w kolejności, ale są zdecydowanie wyjątki, szczególnie w niektórych mniej popularnych klasach kolekcji. (Na przykład w C5 wiele kolekcji zwraca wartości w bardzo różnych zamówieniach, niż zostały one dodane przy wyliczaniu).

+4

Nie zgadzam się z trzęsieniem ziemi tutaj. Jak już wspomniałem, istnieją implementacje list, które nie gwarantują zamówienia. Standardowa tablica w języku C#, a także klasy listy BCL gwarantują kolejność, ale pierwotne pytanie nie ograniczało się tylko do tych ... –

0

Brak gwarancji według projektu. foreach jest przeznaczony do wyliczania bez zlecenia i oznacza, że ​​środowisko wykonawcze może nawet przetwarzać równolegle kilka elementów. Nigdy nie powinieneś polegać na żadnej kolejności wyliczania.

Powiązane problemy