🔥 Zapisy zamknięte, ale możesz pobrać Roadmapę .NET i dołączyć do listy oczekujących — Pobierz i dołącz do Listy VIP →

Pętla for w C# — składnia i przykłady

Pętla for to podstawowe narzędzie, gdy znasz z góry liczbę powtórzeń albo potrzebujesz operować na indeksie elementu. W tym wpisie zobaczysz składnię, dokładną kolejność działania oraz praktyczne przykłady.

Składnia pętli for

for (inicjalizacja; warunek; iterator)
{
    // blok kodu wykonywany w każdej iteracji
}
  • inicjalizacja – wykonywana raz, na starcie (zwykle deklaracja licznika, np. int i = 0).
  • warunek – wyrażenie logiczne sprawdzane przed każdą iteracją; pętla działa, dopóki jest true.
  • iterator – wykonywany po każdym przejściu ciała pętli (najczęściej i++).

Jak działa krok po kroku

Kolejność jest stała i warto ją zapamiętać:

  1. jednorazowa inicjalizacja,
  2. sprawdzenie warunku – jeśli false, pętla się kończy,
  3. wykonanie ciała pętli,
  4. wykonanie iteratora,
  5. powrót do punktu 2.

Oznacza to, że iterator (np. i++) działa po pierwszym wykonaniu ciała, a warunek jest sprawdzany jako pierwszy — więc ciało może nie wykonać się ani razu.

Prosty przykład

for (int i = 0; i < 10; i++)
{
    Console.WriteLine(i);   // wypisze 0, 1, 2, ... 9
}

Wiele zmiennych w nagłówku

W sekcji inicjalizacji i iteratora można zadeklarować i zmieniać kilka zmiennych — muszą one być tego samego typu, a poszczególne elementy oddzielamy przecinkami.

for (int i = 1, j = 20; i <= 10 || j <= 40; i++, j += 2)
{
    Console.WriteLine("i: {0}, j: {1}", i, j);
}

Iterowanie wstecz i co drugi element

Jedna z sytuacji, w której for wygrywa z foreach, to pełna kontrola nad krokiem iteracji — łatwo iterować od tyłu albo pomijać elementy:

var liczby = new List<int> { 10, 20, 30, 40, 50 };

// od tyłu — przydatne, gdy podczas iteracji usuwasz elementy z listy
for (int i = liczby.Count - 1; i >= 0; i--)
{
    Console.WriteLine(liczby[i]);   // 50, 40, 30, 20, 10
}

// co drugi element
for (int i = 0; i < liczby.Count; i += 2)
{
    Console.WriteLine(liczby[i]);   // 10, 30, 50
}

Iterowanie wstecz to jedyny bezpieczny sposób na usuwanie elementów z listy w trakcie pętli po indeksie — usuwanie od przodu przesuwa indeksy pozostałych elementów i łatwo o pominięcie jednego z nich.

Pętla nieskończona i wyjście z niej

Wyrażenia w nagłówku for są opcjonalne. Pominięcie warunku oznacza, że domyślnie przyjmuje on wartość true — pętla staje się nieskończona. Wyjść z niej można instrukcją break.

for (; ; )   // brak warunku = pętla nieskończona
{
    // ...
    if (czyZakonczyc)
    {
        break;   // wyjście z pętli
    }
}

break i continue

Wewnątrz pętli break przerywa ją całkowicie, a continue pomija resztę bieżącej iteracji i przechodzi do następnej.

for (int i = 0; i < 10; i++)
{
    if (i % 2 == 0)
    {
        continue;   // pomiń liczby parzyste
    }
    Console.WriteLine(i);   // 1, 3, 5, 7, 9
}

Pułapka: modyfikacja licznika wewnątrz ciała pętli

Nic nie broni Ci zmienić zmiennej sterującej wewnątrz ciała pętli, ale to niemal zawsze błąd — psuje przewidywalną liczbę iteracji i zaskakuje każdego, kto czyta kod później:

// ⚠️ myląca pętla — liczba iteracji nie odpowiada nagłówkowi
for (int i = 0; i < 10; i++)
{
    Console.WriteLine(i);
    if (i == 5)
    {
        i += 3;   // "kradniemy" iteracje, pętla skończy się wcześniej niż sugeruje warunek
    }
}

Jeśli potrzebujesz przeskakiwać elementy warunkowo, użyj continue zamiast ręcznej manipulacji licznikiem — intencja jest wtedy jasna dla czytelnika.

Kiedy używać for?

Sięgaj po for, gdy znasz liczbę powtórzeń lub potrzebujesz indeksu (np. modyfikacja elementów tablicy po pozycji, iteracja co drugi element, pętle wstecz). Gdy po prostu przechodzisz po wszystkich elementach kolekcji i indeks nie jest potrzebny — czytelniejsza będzie pętla foreach.

💡 Pętlę for wygodnie wstawisz w Visual Studio snippetem: wpisz for i naciśnij dwukrotnie Tab.

Jeśli szukasz przeglądu wszystkich rodzajów pętli w C#, zobacz Pętle w C# — for, while, foreach. Pętlę po kolekcjach bez indeksu pokazujemy w Pętla foreach w C#.

FAQ

Czy można pominąć nagłówek for całkowicie?
Tak — wszystkie trzy sekcje nagłówka są opcjonalne, ale średniki muszą zostać: for (;;) to poprawna, nieskończona pętla.

Czy for jest wolniejsze niż foreach?
Dla tablic i List<T> różnica jest w praktyce pomijalna — kompilator JIT dobrze optymalizuje oba przypadki. Wybór między nimi to przede wszystkim kwestia czytelności, nie wydajności.

👨‍💻
Mariusz Jurczenko
Senior .NET Developer · 10+ lat doświadczenia komercyjnego

Programista .NET z doświadczeniem komercyjnym w firmach takich jak NFZ, Kamsoft, Diagnostyka, Hermes Reply Polska czy Etisoft Smart Solutions. Twórca kursów, z których skorzystało już ponad 11 000 osób w Strefie Kursów i ponad 1 000 kursantów na dev-hobby.pl.

Specjalizacja: Clean Code, Clean Architecture i uczenie programowania tak, żeby dało się je naprawdę zrozumieć — nie wykuć.

🚀 Co dalej?

Zobacz to w praktyce na wideo i pobierz darmową roadmapę, żeby ułożyć naukę w spójną ścieżkę do pierwszej pracy.

czytanie to początek

Zamień wiedzę w umiejętności

Pobierz darmową Roadmapę .NET i ułóż takie tematy jak ten w spójną ścieżkę do pierwszej pracy.

Pobieram roadmapę →