C_Sharp-制御構文

C#の条件分岐処理

ifステートメント

C#におけるif文(条件分岐)は、以下の形式となります。(C/C++と同様の記述方法です)


class Program
{
    static void Main() 
    {
        int a = 10;
        int b = 15;

        if(a == b){
            System.Console.WriteLine("a == b");
        }else if(a > b){
            System.Console.WriteLine("a > b");
        }else{
            System.Console.WriteLine("a < b");
        }
    }
}

C#のswitchステートメント

C#ではswitch文におけるフォールスルー(caseラベルを超えて実行すること)を原則禁止しています。

caseブロックにおいてbreak文を付け忘れた場合には、コンパイルエラーとなります。


明示的にフォールスルーを行う場合には、ラベルのみを記述します。

また、case文中でgoto文を用いることが可能であり、強制的にフォールスルーを行うことは可能です。しかし、可読性の観点からあまり推奨されません。


class Program
{
    static void Main() 
    {
        System.Console.Write("> input number(0, 1, 2, 3) : ");
        int num = int.Parse(System.Console.ReadLine());

        switch(num){
        case 0:
            System.Console.WriteLine("zero.");
            break;
        case 1: // ラベルのみであればフォールスルーします。
        case 2:
            System.Console.WriteLine("1 or 2.");
            break;
        case 3:
            System.Console.Write("3 or ");
            goto case 2; // ラベルへgotoします。
        default:
            break;
        }
    }
}

文字列のswitch文

C#ではswitchの条件として文字列を扱うことが可能です。

条件にnullを指定することも可能です。


class Program
{
    static void Main() 
    {
        System.Console.Write("> ");
        var msg = System.Console.ReadLine();

        switch(msg){
        case "":
            System.Console.WriteLine("no message");
            break;
        case null:
            System.Console.WriteLine("message is null");
            break;
        default:
            System.Console.WriteLine(msg);
            break;
        }
    }
}

C#の反復処理

C#のforステートメント

c++などと同様に、for文でのみ一時的に利用する変数をfor文のループ開始時に定義することが可能です。


class Program
{
    static void Main() 
    {
        for(int cnt = 0; cnt < 10; cnt++){
            System.Console.WriteLine("count = {0}", cnt);
        }
    }
}

C#のwhileステートメント

継続条件を満たす限り繰り返し処理を行います。(C/C++と同様の記述方法です)


class Program
{
    static void Main() 
    {
        int cnt = 0;
        while(cnt < 10){
            System.Console.WriteLine("count = {0}", cnt);
            cnt++;
        }
    }
}

C#のdo whileステートメント

do-while文は最低1回はブロック内の命令が実行される反復処理です。(C/C++と同様の記述方法です)


class Program
{
    static void Main() 
    {
        int cnt = 0;
        do{
            System.Console.WriteLine("count = {0}", cnt);
            cnt++;
        }while(cnt < 10);
    }
}

C#のforeachステートメント

foreachは配列やコレクションの要素を列挙するための制御構文です。

イテレータ(デザインパターン)を言語に組み込んだものです。


class Program
{
    static void Main() 
    {
        int[] nums = new int[] { 1, 2, 3, 4, 5 };
        foreach(int num in nums){
            System.Console.WriteLine(num);
        }
    }
}

breakとcontinue

繰り返し文の途中で抜けるにはbreak文を使用します。

後続処理をスキップし、次の繰り返しに進むにはcontinue文を使用します。


ジャンプ処理

C#のgotoステートメント

C#におけるgoto文は移動可能なジャンプ先に制限があります。

ブロック内からブロック外にジャンプすることは可能ですが、ブロック外からブロック内にジャンプすることはできません。

つまり、C/C++のように関数内で自由にジャンプすることはできません。


class Program
{
    static void Main() 
    {
        //goto LABEL_A;  // ブロック内へのジャンプはエラーとなる
        {
            LABEL_A:
            System.Console.WriteLine("LABEL A");

            goto LABEL_B; // ブロック外へのジャンプは可能です。
            System.Console.WriteLine("----"); // ここは通らない。
        }
        LABEL_B:
        System.Console.WriteLine("LABEL B");
    }
}

関連ページ