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?
Foreach działa na typach implementujących IEnumerable<T>, a nie tylko na listach. Lista zresztą implementuje ten interfejs.
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ć.
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.
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ć.
To dlatego, że metoda ForEach wprowadza tzw. "side effects" - modyfikuje elementy kolekcji.
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.
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ę. ;]