同じ結果を返す複数のケースをサポートするには、switch式をどのように記述する必要がありますか?
バージョン8より前のc#では、スイッチは次のように記述できます。
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つのスイッチケースアームにする方法は?
「Rufus L」からの提案ごとに更新:
私の与えられた例ではこれはうまくいきます。
var switchValue = 3;
var resultText = switchValue switch
{
var x when (x >= 1 && x <= 3) => "one to three",
4 => "four",
5 => "five",
_ => "unknown",
};
しかし、それはまさに私が達成したいことではない。これはまだ1つのケース(フィルター条件付き)であり、複数のケースが同じ右側の結果をもたらすわけではありません。
スイッチタイプがフラグ列挙型の場合
[System.Flags]
public enum Values
{
One = 1,
Two = 2,
Three = 4,
Four = 8,
OneToThree = One | Two | Three
}
var resultText = switchValue switch
{
var x when Values.OneToThree.HasFlag(x) => "one to three",
Values.Four => "4",
_ => "unknown",
};