C#でのswitch文の範囲指定の方法ついてご紹介!

- システム
エンジニア - if文とswich文の範囲指定の違いついて教えてください。
- プロジェクト
マネージャー - swich文での範囲指定は非常にシンプルでif文に近い範囲指定が可能です。
C#でのswitch文の範囲指定について
今回は、C#でのswitch文の範囲指定について説明します。
if文では以下のように範囲を指定できます。
1 2 3 4 |
if( ( 0 <= a ) && ( a <= 10 ) ){ //処理 } else if( ( 11 <= a ) && ( a <= 20 ) ){ //処理 } |
switch文ではif文のように単純には範囲を指定できません。
switch文での範囲の指定方法について紹介します。
C#でのswitch文の範囲指定に興味のある方はぜひご覧ください。
caseを並べる
C#では、caseを並べることで、範囲指定と同じ挙動となります。
実際のソースコードを見てみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
using System; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { SwitchTest(1); SwitchTest(3); SwitchTest(4); SwitchTest(5); } static void SwitchTest(int i) { switch (i) { case 1: case 2: case 3: Console.WriteLine(i + "は1~3です"); break; case 4: case 5: case 6: Console.WriteLine(i + "は4~6です"); break; default: Console.WriteLine("それ以外"); break; } } } } |
実行結果は以下のようになります。
1 2 3 4 |
1は1~3です 3は1~3です 4は4~6です 5は4~6です |
このように、caseを並べれば範囲指定になります。
しかし、範囲が広い場合はcaseの数が増えるので、現実的ではありません。
switch句を式にする
C#では、switch句を式にすることで、範囲指定と同じ挙動となります。
実際のソースコードを見てみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
using System; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { SwitchTest(1); SwitchTest(24); SwitchTest(25); SwitchTest(60); } static void SwitchTest(int i) { switch (i / 25) { case 0: Console.WriteLine(i + "は1~24です"); break; case 1: Console.WriteLine(i + "は25~49です"); break; case 2: Console.WriteLine(i + "は50~74です"); break; default: Console.WriteLine("それ以外"); break; } } } } |
実行結果は以下のようになります。
1 2 3 4 |
1は1~24です 24は1~24です 25は25~49です 60は50~74です |
引数iを25で除算した結果でcaseを記述します。
しかし、範囲が等間隔でない場合は単純な式では実現できません。
switch句に関数を指定する
C#ではswitch句に関数を記述することもできます。
例えば、数字の桁数で分岐するケースを考えた場合、数字を文字列に変換して文字列数をカウントすることで、桁数を求められます。
実際のソースコードを見てみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
using System; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { SwitchTest(1); SwitchTest(-7); SwitchTest(40); SwitchTest(-290); } static void SwitchTest(int i) { switch (Math.Abs(i).ToString().Length) { case 1: Console.WriteLine(i + "は-9~9です"); break; case 2: Console.WriteLine(i + "は-99~99です"); break; case 3: Console.WriteLine(i + "は-999~999です"); break; default: Console.WriteLine("それ以外"); break; } } } } |
実行結果は以下のようになります。
1 2 3 4 |
1は-9~9です -7は-9~9です 40は-99~99です -290は-999~999です |
このように、C#ではswitch句に関数を記述することもできます。
caseのwhen句で条件を指定する
C#では、caseにwhen句で条件を指定できます。
実際のソースコードを見てみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
using System; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { SwitchTest(10); SwitchTest(30); SwitchTest(55); } static void SwitchTest(object o) { switch (o) { case int i when i <= 20: Console.WriteLine(i + "は20以下です"); break; case int i when i <= 40: Console.WriteLine(i + "は21以上40以下です"); break; case int i when i <= 60: Console.WriteLine(i + "は41以上60以下です"); break; default: Console.WriteLine("それ以外"); break; } } } } |
実行結果は以下のようになります。
1 2 3 |
10は20以下です 30は21以上40以下です 55は41以上60以下です |
こちらの方がif文に近い使い方です。
このように、C#ではcaseにwhen句で条件を指定できます。
caseのwhenで条件を指定する(応用編)
先ほどのサンプルプログラムを応用すれば、クラスのインスタンスをswitchに渡して、when句で範囲を指定できます。
実際のソースコードを見てみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
using System; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { Human human1 = new Human(); human1.name = "human1"; human1.age = 10; Human human2 = new Human(); human2.name = "human2"; human2.age = 30; Human human3 = new Human(); human3.name = "human3"; human3.age = 55; SwitchTest(human1); SwitchTest(human2); SwitchTest(human3); } static void SwitchTest(object o) { switch (o) { case Human h when h.age <= 20: Console.WriteLine(h.name + "は若者です"); break; case Human h when h.age <= 40: Console.WriteLine(h.name + "は大人です"); break; case Human h when h.age <= 60: Console.WriteLine(h.name + "は中年です"); break; default: Console.WriteLine("それ以外"); break; } } } class Human { public string name { get; set; } public int age { get; set; } } } |
実行結果は以下のようになります。
1 2 3 |
human1は若者です human2は大人です human3は中年です |
このように、C#ではクラスのインスタンスをswitchに渡して、when句で範囲を指定できます。
- システム
エンジニア - swich文では関数も使用することができるのですね。
- プロジェクト
マネージャー - はい。またwhen句を利用することでよりif文に近い使い方も可能です。
まとめ
いかがでしたでしょうか。C#でのswitch文での範囲の指定方法について紹介しました。
when句を利用すれば、switch文でもif文に近い使い方ができます。
ぜひご自身でC#のソースコードを書いて、理解を深めていきましょう。
FEnet.NETナビ・.NETコラムは株式会社オープンアップシステムが運営しています。
株式会社オープンアップシステムはこんな会社です
秋葉原オフィスには株式会社オープンアップシステムをはじめグループのIT企業が集結!
数多くのエンジニアが集まります。

-
スマホアプリから業務系システムまで
スマホアプリから業務系システムまで開発案件多数。システムエンジニア・プログラマーとしての多彩なキャリアパスがあります。
-
充実した研修制度
毎年、IT技術のトレンドや社員の要望に合わせて、カリキュラムを刷新し展開しています。社内講師の丁寧なサポートを受けながら、自分のペースで学ぶことができます。
-
資格取得を応援
スキルアップしたい社員を応援するために資格取得一時金制度を設けています。受験料(実費)と合わせて資格レベルに合わせた最大10万円の一時金も支給しています。
-
東証プライム上場企業グループ
オープンアップシステムは東証プライム上場「株式会社オープンアップグループ」のグループ企業です。
安定した経営基盤とグループ間のスムーズな連携でコロナ禍でも安定した雇用を実現させています。
株式会社オープンアップシステムに興味を持った方へ
株式会社オープンアップシステムでは、開発系エンジニア・プログラマを募集しています。
年収をアップしたい!スキルアップしたい!大手の上流案件にチャレンジしたい!
まずは話だけでも聞いてみたい場合もOK。お気軽にご登録ください。


C#新着案件New Job
システム開発/東京都新宿区/【WEB面談可/C#経験者/20代前半の方活躍中/経験1年以上の方活躍中】/在宅勤務
月給29万~34万円東京都新宿区(新宿駅)システム開発/東京都新宿区/【WEB面談可/C#経験者/20代後半~40代の方活躍中/経験年数不問】/在宅勤務
月給41万~50万円東京都新宿区(新宿駅)デバック、テスト項目の作成/神奈川県横浜市/【WEB面談可/C#経験者/20代前半の方活躍中/経験1年以上の方活躍中】/在宅勤務
月給29万~34万円神奈川県横浜市(桜木町駅)デバック、テスト項目の作成/神奈川県横浜市/【WEB面談可/C#経験者/20代後半~40代の方活躍中/経験年数不問】/在宅勤務
月給41万~50万円神奈川県横浜市(桜木町駅)基幹システム開発導入/東京都新宿区/【WEB面談可/C#経験者/20代前半の方活躍中/経験1年以上の方活躍中】/在宅勤務
月給29万~34万円東京都新宿区(西新宿駅)基幹システム開発導入/東京都新宿区/【WEB面談可/C#経験者/20代後半~40代の方活躍中/経験年数不問】/在宅勤務
月給41万~50万円東京都新宿区(西新宿駅)