C#のcontinueキーワード:ループ処理をスキップして次の繰り返しに進む方法

目次

ループ処理における「スキップ」の必要性

C#でforforeachwhileなどのループ(繰り返し処理)を実装する際、特定の条件に合致した場合にのみ、その回(イテレーション)の処理を中断し、すぐに次の繰り返しに進みたいというケースがあります。

例えば、リスト内のデータを処理中、特定の値(例: エラーデータや処理不要なデータ)を発見した場合、その後の処理をすべてスキップして次のデータに移りたい、といった状況です。

このような制御を実現するために使用されるのが continue キーワードです。


continue キーワードとは

continueステートメントは、現在実行中のループブロック(for, while, do-while, foreach)において、残りの処理を即座に中断し、強制的に次のイテレーション(繰り返し)の評価に移るよう制御します。a flow chart showing a loop with a continue statementの画像

continueが呼び出されると、continue以降に記述されているループブロック内のコードは実行されません。

  • for ループの場合: 「変化式」(例: i++)が実行され、次に「条件式」が評価されます。
  • while / do-while ループの場合: すぐに「条件式」の評価に移ります。
  • foreach ループの場合: すぐにコレクションの「次の要素」の取り出しに移ります。

continue の使用例

continueは、if文と組み合わせて使用するのが一般的です。

例1: foreach で特定の要素をスキップする

商品価格のリスト(List<decimal>)があり、合計金額を計算するシナリオを考えます。ただし、リストには0円やマイナス(無効なデータ)が含まれている可能性があり、それらは合計に加算せずに無視(スキップ)したいとします。

using System;
using System.Collections.Generic;

public class ContinueForeachExample
{
    public static void Main()
    {
        // 0円やマイナスを含む商品価格リスト
        var itemPrices = new List<decimal> { 1500m, 800m, 0m, -500m, 2100m };
        decimal totalAmount = 0m;

        Console.WriteLine("有効な価格のみを合計します...");

        // foreach ループで価格を処理
        foreach (var price in itemPrices)
        {
            // 価格が0以下の場合は、この回の処理をスキップする
            if (price <= 0m)
            {
                Console.WriteLine($"無効な価格データ ({price}円) をスキップしました。");
                continue; // これ以降の処理 (totalAmount += price) を実行せず、次の要素へ
            }

            // 有効な価格のみが加算される
            totalAmount += price;
            Console.WriteLine($"加算: {price}円 (現在合計: {totalAmount}円)");
        }

        Console.WriteLine($"---");
        Console.WriteLine($"最終合計金額: {totalAmount}円");
    }
}

出力結果:

有効な価格のみを合計します...
加算: 1500円 (現在合計: 1500円)
加算: 800円 (現在合計: 2300円)
無効な価格データ (0円) をスキップしました。
無効な価格データ (-500円) をスキップしました。
加算: 2100円 (現在合計: 4400円)
---
最終合計金額: 4400円

例2: for ループで特定の条件をスキップする

1から20までの数値のうち、「偶数」のみを出力したい場合(=奇数の場合はスキップしたい場合)は、以下のように記述できます。

using System;

public class ContinueForExample
{
    public static void Main()
    .WriteLine("1から20までの偶数のみを表示します:");

        for (int i = 1; i <= 20; i++)
        {
            // 数値が奇数かどうかを判定 (2で割った余りが1かどうか)
            if (i % 2 == 1)
            {
                continue; // 奇数の場合、この下の Console.WriteLine をスキップして i++ に進む
            }

            // 偶数の場合のみ、この処理が実行される
            Console.WriteLine(i);
        }
    }
}

出力結果:

1から20までの偶数のみを表示します:
2
4
6
8
10
12
14
16
18
20

continuebreak の明確な違い

continueとよく似た制御ステートメントにbreakがありますが、動作は全く異なります。この違いを理解することは非常に重要です。

  • continue(スキップ): ループの現在の回(イテレーション)だけを中断し、次の繰り返し処理に進みます(ループは継続します)。
  • break(中断): ループ全体を即座に終了し、ループ構文の次のステートメントに制御を移します(ループは終了します)。

使い分け:

  • continue: 「このデータは処理不要なので、次に行ってほしい」
  • break: 「探していたデータが見つかったので、もう探す必要はない」

まとめ

continueキーワードは、ループ処理の途中で特定の条件に合致した場合に、その回の処理を安全にスキップするための構文です。

if文と組み合わせることで、エラーデータの無視や特定条件の除外など、ループのロジックをより柔軟かつ可読性高く記述できます。breakとの違いを明確に理解し、適切に使い分けることが重要です。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次