新しいSwitch文
サポート
.NetCore3.x-
基本コード
Before
c#のバージョン7までは、次のように文としてコーディングしていました。
static string NumberBefore(int num) { switch (num) { case 1: return "1です"; case 2: return "2です"; default: return "1と2以外です"; } }
このメソッドについて
1を引数として渡された場合、 「1です」を戻り値とする。 2を引数として渡された場合、 「2です」を戻り値とする。 それ以外の場合、 「1と2以外です」を戻り値とする。
After
バージョン8からは、スイッチを式として書けるようになりました。
static string NumberAfter(int num) { string result; result = num switch { 1 => "1です", 2 => "2です", _ => "1と2以外です", }; return result; }
一次変数のresultを省略して(インテリセンスで「インラインの一時変数」を選択しても良い)
static string NumberAfter(int num) { return num switch { 1 => "1です", 2 => "2です", _ => "1と2以外です", }; }
メソッドに式本体を利用する
メソッドのシグネチャをクリックして、カーソルを移動し、インテリセンスのヒントから変換します。
static string NumberAfter(int num) => num switch { 1 => "1です", 2 => "2です", _ => "1と2以外です", };
LINQで使った場合
ラムダ式
1行でまとめると
string[] strNums = nums.Select(num => num switch { 1 => "1です", 2 => "2です", _ => "1と2以外です", }).ToArray();
見易く改行
string[] strNums = nums.Select(num => num switch { 1 => "1です", 2 => "2です", _ => "1と2以外です", }).ToArray();
次からのコードは、インテリセンスで候補変換できます。
ラムダ記号=> の真ん中(=と>の間)をクリックして、カーソルを移動し、インテリセンスのヒントから変換します。
メソッドを分割した場合
static string Method(int num) { return num switch { 1 => "1です", 2 => "2です", _ => "1と2以外です", }; } public static void Main(string[] args) { int[] nums = { 1, 2, 3 }; string[] strNums = nums.Select(Method).ToArray(); }
ローカル関数
int[] nums = { 1, 2, 3 }; Func<int, string> selector = num => num switch { 1 => "1です", 2 => "2です", _ => "1と2以外です", }; string[] strNums = nums.Select(selector).ToArray();
匿名メソッド
int[] nums = { 1, 2, 3 }; string[] strNums = nums.Select(delegate (int num) { return num switch { 1 => "1です", 2 => "2です", _ => "1と2以外です", }; }).ToArray();
ディスカッション
コメント一覧
まだ、コメントがありません