# Foreach Loop

Visit every element of an array without an index using C#'s foreach loop, and leave a loop early with break or skip ahead with continue.

Apprentice · C# · Updated November 3, 2026

## After this lesson you can

- Visit every element of an array with a foreach loop
- Stop a loop early with break, or skip to the next iteration with continue

## Key takeaways

- `foreach (string name in names)` hands you each element in order, with no index to get wrong.
- `foreach` only reads, forward. Use `for` when you need the index, want to change elements, or go backward or in steps.
- To find the highest value, start with the first element, not 0, and replace it whenever you find a bigger one.
- `break` ends a loop at once; `continue` skips the rest of this iteration and goes on to the next.

Most of the time you loop through an array, you want every element, in order, and the index is just a way to get there. A `foreach` loop skips the index and hands you each element directly.

## The shape

```csharp
string[] names = { "Alice", "Bob", "Charlie" };

// read it as: for each name in names
foreach (string name in names)
{
    Console.WriteLine(name);
}
```

```text
Alice
Bob
Charlie
```

Each iteration, `name` holds the next element. There's no counter to start, check or step, so there's no way to get the bounds wrong.

You can write `var` instead of the type, and C# works it out from the array: `foreach (var name in names)`.

## Adding up with foreach

The total pattern from the `for` loop lesson is shorter with `foreach`:

```csharp
decimal[] prices = { 12.75m, 10.25m, 8.44m, 9.20m };
decimal total = 0;

foreach (decimal price in prices)
{
    total += price;
}

Console.WriteLine("Total: $" + total);
```

```text
Total: $40.64
```

## Finding the highest

Another everyday pattern: keep the best value so far, and replace it whenever you find a better one.

```csharp
decimal[] prices = { 12.75m, 10.25m, 21.34m, 9.20m };
decimal highest = prices[0];

foreach (decimal price in prices)
{
    if (price > highest)
    {
        highest = price;
    }
}

Console.WriteLine("Highest price: $" + highest);
```

```text
Highest price: $21.34
```

Start with the first element, not 0: if every price were negative, 0 would be wrong.

## What foreach can't do

`foreach` only reads, forward, one element at a time. When you need any of these, use a `for` loop:

- the index itself (to print `1.`, `2.`, `3.`, or to compare neighbors);
- to change the array's elements (`name` is a copy; assigning to it is an error);
- to go backward, or skip elements.

## Leaving early: break and continue

Two keywords change how any loop runs:

- `break` ends the loop at once. The program carries on after it.
- `continue` skips the rest of this iteration and goes on to the next.

```csharp
string[] names = { "Ron", "Lisa", "Kent", "Michelle" };
bool found = false;

foreach (string name in names)
{
    if (name == "Kent")
    {
        found = true;
        break;
    }
}

Console.WriteLine("Found Kent: " + found);

int[] numbers = { 1, 2, 3, 4, 5, 6 };
int evenTotal = 0;

foreach (int number in numbers)
{
    if (number % 2 != 0)
    {
        continue;
    }
    evenTotal += number;
}

Console.WriteLine("Total of the even numbers: " + evenTotal);
```

```text
Found Kent: True
Total of the even numbers: 12
```

Once Kent is found there's no need to look further, so `break` stops the search. `continue` skips each odd number before it's added.

## for or foreach?

| You need | Use |
|---|---|
| every element, in order, just to read it | `foreach` |
| the index, or to change elements | `for` |
| to go backward or in steps | `for` |
| to count a set number of times, with no array | `for` |

## Check yourself

2 questions to try on the lesson page.

## So what

`foreach` says what you mean, "every element", with nothing to get wrong. Reach for `for` when the index matters, and use `break` and `continue` to stop or skip without extra conditions.

## Key terms

- [foreach Loop](https://www.ask-codey.com/glossary/foreach-loop)
- [break](https://www.ask-codey.com/glossary/break-c-sharp)
- [continue](https://www.ask-codey.com/glossary/continue-c-sharp)

## Cheat sheets

- [Foreach Loop](https://www.ask-codey.com/cheat-sheets/looping-in-csharp-foreach-loop-cheat-sheet)

Source: https://www.ask-codey.com/lessons/looping-in-csharp-foreach-loop
