1. ホーム
  2. c#

[解決済み] C# 8 switch 式で、複数のケースで同じ結果を得ることができる

2022-04-27 03:15:29

質問

同じ結果を返すケースが複数ある場合、switch式はどのように記述すればよいですか?

バージョン8以前のC#では、switchは以下のように記述することができます。

var switchValue = 3;
var resultText = string.Empty;
switch (switchValue)
{
    case 1:
    case 2:
    case 3:
        resultText = "one to three";
        break;
    case 4:
        resultText = "four";
        break;
    case 5:
        resultText = "five";
        break;
    default:
        resultText = "unkown";
        break;
}

C#のバージョン8で、式の構文で使っているときは、こんな感じです。

var switchValue = 3;
var resultText = switchValue switch
{
    1 => "one to three",
    2 => "one to three",
    3 => "one to three",
    4 => "four",
    5 => "five",
    _ => "unknown",
};

そこで質問ですが、1、2、3のケースを1つのスイッチ・ケース・アームだけにして、値を繰り返す必要がないようにするにはどうしたらよいでしょうか?

"さんからのご指摘により更新しました。 ルーファスL "です。

私の例では、これでうまくいきます。

var switchValue = 3;
var resultText = switchValue switch
{
    var x when (x >= 1 && x <= 3) => "one to three",
    4 => "four",
    5 => "five",
    _ => "unknown",
};

しかし、私が達成したいこととはちょっと違う。これはまだ1つのケース(フィルター条件付き)であり、同じ右手結果をもたらす複数のケースではない。

どのように解決するのですか?

インストールはできたのですが、新しい構文で1つのスイッチセクションに複数の別々のケースラベルを指定する方法が見つかりません。

ただし、値を取り込む新しい変数を作成し、条件を使用して同じ結果になるべきケースを表現することはできます。

var resultText = switchValue switch
{
    var x when
        x == 1 ||
        x == 2 ||
        x == 3 => "one to three",
    4 => "four",
    5 => "five",
    _ => "unknown",
};

テストするケースが多い場合は、1行で様々な値をテストできるので、実はこの方が簡潔です。

var resultText = switchValue switch
{
    var x when x > 0 && x < 4 => "one to three",
    4 => "four",
    5 => "five",
    _ => "unknown",
};