C Sharp/条件分岐
< C Sharp
条件分岐
編集if文
編集C#のif
文は他のCファミリー言語と似ていますが、条件式が必ずbool
型である点が異なります。この制約により、条件式は明確に真偽値を返すようになり、プログラムの判定が明確化されます。
- 例:if文の使用
using System; public class IfStmtEx { public static void Main() { var n = 0.0 / 0.0; if (n > 0.0) { Console.WriteLine("n > 0.0"); } else if (n < 0.0) { Console.WriteLine("n < 0.0"); } else if (n == 0.0) { Console.WriteLine("n == 0.0"); } else { Console.WriteLine($"n = {n}"); } } }
- 実行結果
n = NaN
- 構文
if-stmt := if '(' 条件式 ')' 文1 [ else 文2 ]
- 条件式は
bool
型でなければなりません。 - 文には単文や複文が使用でき、複文は
{ }
で複数の文をまとめたブロックです。
switch文
編集C#のswitch
文は、整数だけでなく文字列などの式も扱えるため、さまざまな条件分岐が可能です。
- 整数式を条件としたswitch文
using System; public class SwitchStmtEx { public static void Main() { var random = new System.Random(); var i = random.Next(0, 16); switch (i) { case 2: case 3: case 5: case 7: Console.WriteLine($"{i}は一桁の素数です。"); break; default: Console.WriteLine($"{i}は一桁の素数ではありません。"); break; } } }
- 実行例
2は一桁の素数です。
- 文字列式を条件としたswitch文
using System; public class SwitchStmtEx2 { public static void Main() { string[] ary = new string[] {"東京都", "神奈川県", "千葉県", "埼玉県", "茨城県", "群馬県", "栃木県", "山梨県"}; var random = new System.Random(); var x = ary[random.Next(0, ary.Length)]; switch (x) { case "栃木県": case "群馬県": case "埼玉県": case "山梨県": Console.WriteLine($"{x}は、海に面していません。"); break; default: Console.WriteLine($"{x}は、海に面しています。"); break; } } }
- 実行例
神奈川県は、海に面しています。
- 構文
switch-stmt := switch '(' 条件式 ')' '{' case 式1 ':' 文1 ... [ default ':' 文 ] '}'
パターンマッチングを使用したswitch文
編集C# 7.0以降では、switch
文でパターンマッチングを利用できます。これにより、特定の型や条件に応じた柔軟な処理が可能です。
- パターンの種類
- 型パターン:特定の型にマッチします。
object obj = "hello"; switch (obj) { case int i: // 整数型の処理 break; case string s: // 文字列型の処理 break; }
- 組合せパターン:複数条件を組み合わせます。
switch (value) { case > 0 and < 10: // 0より大きく10未満の処理 break; }
- プロパティパターン:オブジェクトのプロパティに基づきます。
switch (shape) { case Circle { Radius: > 0 }: // 半径が0より大きい円の場合の処理 break; }
switch式
編集C# 8 で追加されたswitch
式により、より簡潔な条件分岐が可能です。
using System; public class SwitchExprEx { public static void Main() { string[] ary = new string[]{"春", "梅雨", "夏", "秋", "冬"}; var random = new System.Random(); var x = ary[random.Next(0, ary.Length)]; var message = x switch { "春" => "Spring", "夏" => "Summer", "秋" => "Autumn", "冬" => "Winter", _ => throw new InvalidOperationException() }; Console.WriteLine($"{x}は、英語で {message} です。"); } }
- 実行例
冬は、英語で Winter です。