Pętla foreach w C#
Pętla foreach
to jeden z najbardziej użytecznych i popularnych mechanizmów w C# do iterowania przez kolekcje danych. W tym artykule dowiesz się, jak prawidłowo używać pętli foreach
oraz poznasz jej zalety w porównaniu z innymi metodami iteracji.
Co to jest pętla foreach?
Pętla foreach
to specjalna konstrukcja w C#, która umożliwia łatwe przechodzenie przez wszystkie elementy w kolekcji, takiej jak tablica, lista czy inna struktura implementująca interfejs IEnumerable
. Jest to bezpieczniejsza i bardziej czytelna alternatywa dla tradycyjnych pętli for
czy while
.
Składnia pętli foreach
Podstawowa składnia pętli foreach
wygląda następująco:
foreach (typ_zmiennej nazwa_zmiennej in kolekcja)
{
// kod do wykonania dla każdego elementu
}
Praktyczny przykład – iteracja przez tablicę miesięcy
Bardzo częstym zadaniem związanym z kolekcjami jest to, że potrzebujemy zrobić coś z każdym elementem w kolekcji po kolei. Na Przykład z tablicą chcemy wymienić wszystkie miesiące roku w kolejności.
Mamy tablicę miesięcy w roku.
string[] monthsOfYear = {
"January",
"February",
"March",
"April",
"May",
"June",
"July",
"August",
"September",
"October",
"November",
"December"
};
I teraz, aby wyświetlić wszystkie miesiące. Użyjemy pętli foreach !
Instrukcja foreach pozwala na przejście przez wszystkie elementy tablicy albo innej kolekcji, umożliwiając dostęp do każdego elementu.
foreach (var month in monthsOfYear)
{
Console.WriteLine(month);
}
Foreach to najprostszy sposób na przegladanie każdego elementu w kolekcji. Mówię dosłownie dla każdego miesiąca z wszyskich miesięcy w roku, a potem mamy instrukcje w nawiasach klamrowych.
I co się stanie, stanie się tak, że kod weźmie kolejno każdy element w naszej tablicy. Ustawi tę zmienną miesiac na równą temu elementowi, a następnie wykona wszystko, co jest w pętli. To jest dowolna instrukcja lub blok instrukcji.
W naszym przypadku pętla zostanie wykonana raz z miesiącem równym, pierwszemu elementowi w tablicy – styczeń, następnie wykona się z miesiącem równym drugiemu elementowi tablicy – luty, następnie wykona się z miesiącem równym trzeciemu elementowi tablicy – marzec i tak dalej, aż przejdzie przez wszystko w tablicy.
W tym przypadku w pętli jest po prostu polecenie wypisania elementu do konsoli, ale oczywiście możesz umieścić dowolny kod, aby przetworzyć element, co tylko chcesz. Nie musi to obejmować wyświetlania elementów.
W powyższym przykładzie:
string
to typ elementów w kolekcjimonth
to zmienna tymczasowa reprezentująca aktualny elementmonthsOfYear
to kolekcja, przez którą iterujemy
Jak działa pętla foreach?
Mechanizm działania pętli foreach
jest następujący:
- Pętla pobiera pierwszy element z kolekcji
- Przypisuje go do zmiennej tymczasowej (
month
w naszym przykładzie) - Wykonuje kod wewnątrz bloku pętli
- Przechodzi do następnego elementu i powtarza proces
- Kończy działanie po przetworzeniu wszystkich elementów
Użycie słowa kluczowego var
Możesz również użyć słowa kluczowego var
zamiast jawnego określenia typu:
foreach (var month in monthsOfYear)
{
Console.WriteLine(month);
}
Kompilator automatycznie wywnioskuje typ zmiennej na podstawie typu elementów w kolekcji.
Foreach z różnymi typami danych
Pętla foreach
działa z dowolnymi typami danych. Oto przykłady z różnymi typami kolekcji:
Tablica liczb całkowitych
int[] numbers = { 4, 7, 24, 88 };
foreach (int number in numbers)
{
Console.WriteLine($"Liczba: {number}");
}
Tablica znaków
char[] characters = { 'd', 'z', 'm', '5' };
foreach (char character in characters)
{
Console.WriteLine($"Znak: {character}");
}
Tablica obiektów złożonych
System.Drawing.Rectangle[] rectangles =
{
new System.Drawing.Rectangle(10, 10, 50, 50),
new System.Drawing.Rectangle(30, 10, 50, 50),
new System.Drawing.Rectangle(20, 100, 100, 50),
};
foreach (var rectangle in rectangles)
{
Console.WriteLine($"Prostokąt: X={rectangle.X}, Y={rectangle.Y}, Width={rectangle.Width}, Height={rectangle.Height}");
}
Zalety pętli foreach
1. Czytelność kodu
Pętla foreach
jest bardziej czytelna i intuicyjna niż tradycyjne pętle for
:
// Pętla for - mniej czytelna
for (int i = 0; i < monthsOfYear.Length; i++)
{
Console.WriteLine(monthsOfYear[i]);
}
// Pętla foreach - bardziej czytelna
foreach (string month in monthsOfYear)
{
Console.WriteLine(month);
}
2. Bezpieczeństwo
Pętla foreach
eliminuje ryzyko błędów związanych z indeksami (np. IndexOutOfRangeException
).
3. Uniwersalność
Działa z dowolnymi kolekcjami implementującymi IEnumerable<T>
– tablicami, listami, słownikami itp.
Ograniczenia pętli foreach
Brak dostępu do indeksu
Jeśli potrzebujesz dostępu do indeksu elementu, możesz użyć LINQ:
foreach (var (month, index) in monthsOfYear.Select((value, index) => (value, index)))
{
Console.WriteLine($"{index + 1}. {month}");
}
Tylko do odczytu
W pętli foreach
nie można modyfikować struktury kolekcji (dodawać/usuwać elementy), ale można modyfikować właściwości elementów (jeśli są to typy referencyjne).
Foreach z kolekcjami generycznymi
Pętla foreach
doskonale współpracuje z kolekcjami generycznymi:
List<string> cities = new List<string> { "Warszawa", "Kraków", "Gdańsk", "Wrocław" };
foreach (string city in cities)
{
Console.WriteLine($"Miasto: {city}");
}
Dobre praktyki
- Używaj znaczących nazw zmiennych – zamiast
item
użyjmonth
,number
,city
itp. - Preferuj
foreach
nadfor
gdy nie potrzebujesz indeksu - Używaj
var
gdy typ jest oczywisty z kontekstu - Unikaj modyfikacji kolekcji podczas iteracji
Podsumowanie
Pętla foreach
to potężne i elastyczne narzędzie do iterowania przez kolekcje w C#. Jej prostota, czytelność i bezpieczeństwo czynią ją idealnym wyborem w większości scenariuszy, gdzie potrzebujemy przetworzyć wszystkie elementy kolekcji. Niezależnie od typu danych – czy są to liczby, ciągi znaków, czy złożone obiekty – pętla foreach
zapewnia spójny i intuicyjny sposób na pracę z kolekcjami.
Pętla foreach działa w ten sam sposób, bez względu na typ w kolekcji.
To dopiero początek. W kursie przeprowadzę Cię przez esencję kolekcji w C# — od klasycznej tablicy, przez elastyczną listę, aż po sprytne struktury jak stos, kolejka i słownik. Nie tylko pokażę Ci jak ich używać, ale co ważniejsze — kiedy. Bo dobór kolekcji to nie przypadek, to świadoma decyzja architekta. Chcesz pisać kod, który nie tylko działa, ale ma klasę? Wskakuj do kursu.
Krytykuj przyjaciela w cztery oczy, a chwal zawsze przy świadkach i podwładnych. Leonardo da Vinci & Tm.