Foreach a kolekcje.

0

Czy używanie kolekcji w konstrukcji foreach jest kosztowne? Czy jeżeli używamy często foreach, to np zmiast używać Queue nie lepiej List? Czy List może od razu foreach bez żadnych kosztownych operacji? W LINQ tylko List można na foreach dlatego mnie to zastanawia czy każda inna kolekcja w konstrukcji foreach jest tworzona jako List?

1

Foreach działa na typach implementujących IEnumerable<T>, a nie tylko na listach. Lista zresztą implementuje ten interfejs.

0

To czemu aby używać ForEarch w LINQ, to trzeba na listę? To mnie zmyliło. Skoro na IEnumerable, to w takim razie nie ma znaczenia. Szkoda, że sie nie da przejść z IEnumerable na ForEach w LINQ tylko trzeba tej nieładnej konstrukcji foreach używać.

0

Nie zrozumiałem Cię i podałem Ci błędne info. Myślałem, że mówisz o pętli foreach, a Ty masz na myśli metodę ForEach. Ta faktycznie jest tylko dla listy. Jeśli chcesz tego używać, to musisz pamiętać, że .ToList() tworzy kopię kolekcji, więc ma dodatkowy narzut.

1

Znaczy chodziło o to, czy w kosntrukcji foreach, mimo że przyjmuje IEnumerable, robi się jakaś konwersja w środku. Tak się zasugerowałem LINQ, że tylko z List można naturalnie foreach zrobić.

No to wszystko się wyjaśniło.

Głupio trochę, że się nie da w LINQ przejść od razu z IEnumerable do ForEach, tylko trzeba ToList na IEnumerable robić.

0

To dlatego, że metoda ForEach wprowadza tzw. "side effects" - modyfikuje elementy kolekcji.

0

Może kiedyś Microsoft poprawi .ForEach na bardziej przystępną wersję, tak jak switcha jakiś czas temu. Chociaż i tak późno się wzięli za to.

0
Trzeźwy Polityk napisał(a):

Znaczy chodziło o to, czy w kosntrukcji foreach, mimo że przyjmuje IEnumerable, robi się jakaś konwersja w środku. Tak się zasugerowałem LINQ, że tylko z List można naturalnie foreach zrobić.

Wierutna bzdura. Żadnego foreach w LINQ nie ma i słusznie zresztą, bo w LINQ takich rzeczy nie powinno być. ;]
A to, o czym piszesz, to metoda klasy List<T>, która istniała jeszcze na długo przed LINQ.

Głupio trochę, że się nie da w LINQ przejść od razu z IEnumerable do ForEach, tylko trzeba ToList na IEnumerable robić.

Głupio to jest pisać bzdury zamiast przeczytać dokumentację. ;]

1 użytkowników online, w tym zalogowanych: 0, gości: 1