📖

C#基本まとめ~条件分岐・ループ編~

2022/12/11に公開約2,800字

条件分岐

処理の分岐にはifステートメント、switchステートメントの他に、三項演算子(?:)などがあります。
ifステートメントとswitchの使い分けですが、特定の値にて複数に分岐をする場合はswitchを、複数の条件を交えて分岐する場合はifを使用します。
ただ、C#のswitchはVB.NetのSelectCaseの間隔で使用すると途端にビルドエラーになります。またC++のswitchと異なりブレークスルー(breakを入れないことで次のcaseに流れていく記述方法)が禁止されているため、面倒でもbreakを入れていく必要があります。

ifステートメント

if (条件1 && 条件2 || 条件3)
{
    // 処理(条件1かつ2に当てはまるか条件3に当てはまる場合)
}
else if (条件4 & 条件5 | 条件6)
{
    // 処理(条件4かつ5に当てはまるか条件6に当てはまる場合)
}
else
{
    // 処理(上記条件に当てはまらない場合)
}

switchステートメント

switch (調べる値)
{
    case 値1:
        // 調べる値 = 値1の場合
        break;

    case 値2:
    case 値3:
    case 値4:
        // 調べる値が値2,値3,値4のいずれかの場合
        break;

    case var i when i >= 値5 && i <= 値7:
        // 調べる値が値5~値7の場合
        break;
	
    case var i when i > 値8:
        // 調べる値が値8より大きい場合
        break;
	
    case var i when i == 値9 || i >= 値10 && i <= 値12 || i > 値13:
        // 組み合わせも可能
        break;
	
    default:
        // 上記のいずれにも当てはまらない場合
        break;
}

三項演算子(?:)

条件 ? trueの時の値 : falseの時の値;

ループ

処理をループする方法として、forステートメント、foreachステートメント、whileステートメントがあります。

ループを途中で抜けたい場合はbreakステートメントを使用することで現在のループを抜けることが出来ます。
また、for・foreachステートメントはcontinueステートメントを使用することで強制的に次のステップに進めることが出来ます。

forステートメント

for(カウンタ = 開始値; 繰り返し条件; 繰り返しの度に実行される処理)
    // 処理
    if (途中で抜ける条件)
    {
        // ループを抜ける
        break;
    }
}

foreachステートメント

foreach(要素 in コレクション)
{
    // 処理
}

foreach (var a in new int[] { 1, 2, 3, 4, 5 })
{
    // 処理(1,2,3,4,5を順に処理する)
}

whileステートメント

// 条件によっては一回もループしない
while (条件)
{
    // 条件を満たしている間ループ
    if (途中で抜ける条件)
    {
        // ループを抜ける
        break;
    }
}

// 必ず一回はループ内に入る
do
{
    // 条件を満たしている間ループ
    if (途中で抜ける条件)
    {
        // ループを抜ける
        break;
    }
}
while (条件);

入れ子になったループからの脱出

先にふれたようにbreakステートメントでループを抜けることが出来ますが、抜けられるのは一番内側のループになります。その為、ネストされたループも合わせて抜けたい場合そのままでは抜けることが出来ません。
ネストされたループから脱出する方法の例をあげますので参考にしてみてください。

// 例1:同じ条件やフラグを用いる
for (var i = 1; i <= 10; i++)
{
    for (var j = 1; j <= 10; j++)
    {
        if (抜ける条件) 
	{
            break;
        }
    }
    if (抜ける条件)
    {
        break;
    }
}

// 例2:Gotoを使用
for (var i = 1; i <= 10; i++)
{
    for (var j = 1; j <= 10; j++)
    {
        if (抜ける条件) 
	{
            goto ExitFor;
        }
    }
}
ExitFor:

// 例3:ループ処理を関数化し、関数から抜ける
void LoopMethod()
{
    for (var i = 1; i <= 10; i++)
    {
        for (var j = 1; j <= 10; j++)
        {
            if (抜ける条件) 
	    {
                return;
            }
        }
    }
}

Discussion

ログインするとコメントできます