新しい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();
訪問数 72 回, 今日の訪問数 1回





ディスカッション
コメント一覧
まだ、コメントがありません