2です
C#でswitch case文を使った条件分岐処理を紹介します。
switch(判定する変数)
{
case 値1:
...処理;
break;
case 値2:
...処理;
break;
...
default:
...処理;
break;
}
「判定する変数」の値をcase文で判定し、条件と一致する場合はcaseに続く処理を実行します。どの条件にも当てはまらなかった場合は、default:ブロック内の処理を実行します。C#ではcaseブロックの中にbreak,returnといったswitch文から抜ける記述が必須です(C,C++はなくても良い)。break,returnがない場合はコンパイルエラーとなります。
private void button6_Click(object sender, EventArgs e)
{
int a = 2;
switch (a) {
case 0:
textBox1.Text = "0です";
break;
case 1:
textBox1.Text = "1です";
break;
case 2:
textBox1.Text = "2です";
break;
case 3:
textBox1.Text = "3です";
break;
default:
textBox1.Text = "それ以外です";
break;
}
}
C#ではCaseにintなどの整数型や順序型以外の型も指定できます。以下は文字列によるcaseの分岐例です。
private void button7_Click(object sender, EventArgs e)
{
string str = "Penguin";
switch (str) {
case "Whale":
textBox1.Text = "クジラです";
break;
case "Duck":
textBox1.Text = "アヒルです";
break;
case "Penguin":
textBox1.Text = "ペンギンです";
break;
default:
textBox1.Text = "それ以外です";
break;
}
}
C#では、処理を記述したcaseブロックの最後に break(または return / goto / throw など、switchから抜ける文)が必須です。
これらを省略すると、実行時ではなくビルド時にコンパイルエラーになります。
private void button8_Click(object sender, EventArgs e)
{
int a = 1;
switch (a) {
case 0:
textBox1.Text = "0です";
// break がないためエラーになる
case 1:
textBox1.Text = "1です";
break;
default:
textBox1.Text = "それ以外です";
break;
}
}
上記のコードをビルドするとcase 0: のブロックに break がないため、ビルド時に以下のエラーが発生します。
case 0: の処理の後に break を追加すると、エラーは解消されます。
処理を書かずにcaseラベルだけを連続させる場合は、breakなしで記述できます。複数の値に対して同じ処理を行いたいときに利用します。
以下のコードではビルドエラーになりません。
private void button9_Click(object sender, EventArgs e)
{
int a = 2;
switch (a) {
case 0:
case 1:
case 2:
textBox1.Text = "0〜2のいずれかです";
break;
default:
textBox1.Text = "それ以外です";
break;
}
}