条件分岐

編集

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 です。

脚註

編集