はなちるのマイノート

Unityをメインとした技術ブログ。自分らしくまったりやっていきたいと思いますー!

【C#】C#7より追加された型によるswitch と C#8より追加された複数の値をまとめてswitchする 機能について

はじめに

今回はC#7より追加された型によるswitch と C#8より追加された複数の値をまとめのswitchについて取り上げたいと思います。

概要

型スイッチ

C#7より型によるswitchができるようになりました。

static void Main(string[] args)
{
    // int 1
    TypeSwitch(1);
            
    // float 10 >= 0
    TypeSwitch(10.0f);
            
    // float -5 < 0
    TypeSwitch(-5.0f);
}

private static void TypeSwitch(object obj)
{
    switch (obj)
    {
        // objがint型のとき
        case int n:
            Console.WriteLine($"int {n}");
            break;
        // objがfloat型 かつ 0以上のとき
        case float n when n >= 0:
            Console.WriteLine($"float {n} >= 0");
            break;
        // objがfloat型 かつ 0未満のとき
        case float n when n < 0:
            Console.WriteLine($"float {n} < 0");
            break;
        default:
            Console.WriteLine("default");
            break;
    }
}

複数の値をまとめてswitchする

C#8.0より複数の値をまとめてswitchできるようになりました。

static void Main(string[] args)
{
    // true, true
    MultiSwitch(10, 10);
            
    // true, false
    MultiSwitch(10, -10);
            
    // false, false
    MultiSwitch(-10, -10);
}

private static void MultiSwitch(int x, int y)
{
    switch (x >= 0, y >= 0)
    {
        case (true, true):
            Console.WriteLine("true, true");
            break;
        case (true, false):
            Console.WriteLine("true, false");
            break;
        case (false, true):
            Console.WriteLine("false, true");
            break;
        case (false, false):
            Console.WriteLine("false, false");
            break;
    }
}