[解決済み] 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",
};
関連
-
[解決済み】プログラム実行中に1秒待つ
-
[解決済み】非静的メソッドはターゲットを必要とする
-
[解決済み】なぜこのコードはInvalidOperationExceptionを投げるのですか?
-
[解決済み】Swashbuckle/Swagger + ASP.Net Core: "Failed to load API definition" (API定義の読み込みに失敗しました
-
[解決済み】OnCollisionEnter2Dが実行されない?
-
[解決済み] 2つのリストを結合する
-
[解決済み】 C# 条件演算子エラー 代入、call、increment、decrement、await、new object 式のみ文として使用可能です。
-
[解決済み】WebResource.axdとは何ですか?
-
[解決済み】名前 'ViewBag' が現在のコンテキストに存在しない - Visual Studio 2015
-
[解決済み] switch文の複数ケース
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] [Solved] 1つ以上のエンティティで検証に失敗しました。詳細は'EntityValidationErrors'プロパティを参照してください [重複]。
-
[解決済み] エンティティタイプ <type> は、現在のコンテキストのモデルの一部ではありません。
-
[解決済み】「入力文字列が正しい形式ではありませんでした」エラーの解決方法は?[重複しています]。
-
[解決済み】「namespace x already contains a definition for x」エラーの修正方法は?VS2010にコンバートした後に発生しました。
-
[解決済み】非静的メソッドはターゲットを必要とする
-
[解決済み】なぜこのコードはInvalidOperationExceptionを投げるのですか?
-
[解決済み】OnCollisionEnter2Dが実行されない?
-
[解決済み】ファイルへの読み書きの際に共有違反のIOExceptionが発生する C#
-
VSでscanfエラーを恒久的に解決するには、ソースファイルを作成し、自動的に#define _CRT_SECURE_NO_WARNINGS 1を追加してください。
-
[解決済み】データが存在しないのに読み込もうとする試みが無効である