Dzisiaj bierzemy się za pętlę ”foreach”. Pętla wygląda następująco:
List<string> listaElementów = new List<string>();
Foreach(string element in listaElementów)
{
// wykonaj powtarzalny kawałek kodu
Console.WriteLine("pętla wykonuje się");
}
Jest to pętla, która jest trochę inna od pozostałych. Została stworzona, aby przechodzić przez elementy list. Już tłumaczę dokładnie.
W przypadku innych pętli np. “while” lub “do while” celem jest powtarzanie jakiegoś kawałka kodu do momentu, aż warunek, który jest sprawdzany przy każdym przejściu pętli nie powie inaczej.
W przypadku pętli “for” chodzi o to, żeby przejść pętlę określoną ilość razy np. przejść przez wszystkie osoby w dzienniku i sprawdzić, czy każda z nich jest obecna na zajęciach.
Pętla ”foreach” została zaprojektowana właśnie do takich zadań jak wymienione wyżej w przykładzie. Jak rozłożymy sobie słowo kluczowe ”foreach” uzyskamy “dla każdego”, co jest doskonałym odzwierciedleniem kiedy należy stosować właśnie tą pętlę, czyli dla każdego elementu listy sprawdź np. obecność.
W przypadku tej pętli, aby można było ją zastosować element, po którym chcemy przechodzić w pętli musi spełniać pewne wymagania:
Lista/typ/elementy, po których chcemy przechodzić muszą mieć metodę publiczną bezparametrową “GetEnumerator” i musi on zwracać ten jeden element listy. Bez tego nie da się zastosować na nich pętli ”foreach”. Przykład: mamy listę uczniów w klasie. Ta lista musi mieć możliwość wywołania metody GetEnumerator, która zwróci ucznia, ponadto uczeń musi mieć właściwość publiczną “Current” i publiczną metodę “MoveNext”, która zwraca “true” lub “false” tak, żeby po jej wykonaniu można było dostać kolejnego ucznia.
Pętla po słowie kluczowym ”foreach” posiada “()”, w których definiujemy typ pojedyńczego elementu, następnie słowo kluczowe “in” oraz listę elementów. Czas na przykład:
List<Uczen> listaUczniow = new List<Uczen>();
listaUczniow.Add(new Uczen(){imie: "Adam", nazwisko: "Kowalski"});
listaUczniow.Add(new Uczen(){imie: "Ania", nazwisko: "Nowak"});
//mamy listę 2 uczniów
foreach( Uczen jedenUczen in listaUczniow)
{
Console.writeLine(jedenUczen.Imie);//wypisanie imienia ucznia.
}
Jak widać mamy tutaj słowo kluczowe “foreach”, następnie “(” potem pojedyńczy typ naszej listy “Uczen”, następnie zmienną, w której będzie pojawiał się konkretny kolejny uczeń z listy przy każdym przejściu pętli “jedenIUczen” następnie słowo kluczowe “in” oraz lista, po której przechodzimy “listaUczniow”.
Innym przykładem może być zwykła lista, gdzie użyty został typ System.Span (czyli zakres).
Span<int> oceny = new int[] { 4,4,6,2,1,5};
foreach (int ocena in oceny)
{
Console.Write(ocena);
}
P.S.
Spróbój stworzyć kilka przykładów pętli “foreach” i poćwiczyć w praktyce jej użycie. Wynikami tych ćwiczeń możesz podzielić się w komentarzach lub pisząc do mnie maila 🙂 gdzie chętnie spojrzę, czy wszystko zrozumiałeś poprawnie.
Zostawiam też link do oficjalnej strony Microsoftu, gdzie również można znaleźć informację o pętli “foreach”.