
- 【C#入門】foreach文を完全マスター!基本からfor文との違い、注意点まで解説
- 1. foreach文とは?
- 2. 基本的な使い方
- 3. for文とforeach文の違い・使い分け
- 4. 【重要】foreachの注意点(やってはいけないこと)
- 5. まとめ
【C#入門】foreach文を完全マスター!基本からfor文との違い、注意点まで解説
C#でプログラミングをする上で、避けて通れないのが「繰り返し処理」です。その中でも、配列やリストを扱う際に最も頻繁に使われるのが foreach 文です。
今回は、C#の foreach の基本的な使い方から、for 文との使い分け、そしてハマりやすい注意点までを徹底解説します。
1. foreach文とは?
foreach 文は、配列や List などのコレクション(データの集まり)の要素を、最初から最後まで順番に取り出して処理するための構文です。
「インデックス(要素番号)」を気にする必要がないため、コードがスッキリして読みやすくなるのが最大の特徴です。
基本構文
foreach (型 変数名 in コレクション)
{
// ここで変数名を使って処理を行う
}
最近のC#では、型の部分に var(型推論)を使うのが一般的です。
2. 基本的な使い方
では、実際にコードを見てみましょう。
リスト(List)の中身を表示する
例えば、果物の名前が入ったリストを順番に表示する場合です。
var fruits = new List<string> { "Apple", "Banana", "Orange" };
foreach (var fruit in fruits)
{
Console.WriteLine(fruit);
}
実行結果:
Apple Banana Orange
このように、fruits リストから一つずつ要素を取り出し、変数 fruit に入れて処理してくれます。最後の要素まで行くと自動的にループが終了します。
辞書(Dictionary)をループする
Dictionary の場合、キー(Key)と値(Value)のペアを取り出すことができます。
var scores = new Dictionary<string, int>
{
{ "Tanaka", 80 },
{ "Suzuki", 95 },
{ "Sato", 70 }
};
foreach (KeyValuePair<string, int> entry in scores)
{
// entry.Key で名前、entry.Value で点数を取得
Console.WriteLine($"{entry.Key}: {entry.Value}点");
}
ポイント:
KeyValuePair<...>と書くのが長い場合は、ここでもforeach (var entry in scores)と書くことができます。
3. for文とforeach文の違い・使い分け
「for 文と何が違うの?」と疑問に思うかもしれません。それぞれの特徴を比較してみましょう。
| 特徴 | foreach文 | for文 |
|---|---|---|
| 読みやすさ | ◎ 非常にシンプル | △ インデックス管理が必要 |
| インデックス | 使えない(何番目かわからない) | 使える(i で管理可能) |
| 要素の変更 | 不可(読み取り専用) | 可能 |
| 逆順・飛び級 | 苦手 | 得意(i-- や i+=2 が可能) |
どちらを使うべき?
- 基本は
foreachを使う: 配列の「全要素」を「順番」に見たいだけなら、foreachの方がバグ(範囲外アクセスなど)が起きにくく安全です。 forを使う時: 「3番目の要素だけ書き換えたい」「逆順に処理したい」「インデックス番号自体が必要」な場合はforを使います。
4. 【重要】foreachの注意点(やってはいけないこと)
foreach を使う上で、絶対に知っておくべきルールがあります。それは、ループ中にコレクションの中身を変更(追加・削除)してはいけないということです。
NG例:ループ中に削除しようとする
var numbers = new List<int> { 1, 2, 3, 4, 5 };
foreach (var n in numbers)
{
if (n % 2 == 1)
{
// エラー発生!ループ中にコレクションを変更してはいけません
numbers.Remove(n);
}
}
これを実行すると、InvalidOperationException というエラーが発生し、プログラムが止まります。
解決策
要素を削除したい場合は、以下のいずれかの方法を使います。
for文を逆順で回すRemoveAllメソッドを使う(推奨)- 別のリストにコピーしてから
foreachする (numbers.ToList()を使う)
5. まとめ
foreachはコレクションを順番に処理するのに最適- インデックス管理が不要でコードが読みやすい
Dictionaryも簡単に回せる- ループ中に要素の追加・削除はできないので注意
C#を書く上で、foreach は最も頻繁に使う構文の一つです。まずは「全要素を処理したいときは foreach」と覚えておけば間違いありません!





