switch式
C# 8.0で追加されたswitch式は前からあったswitch文にくらべると格段にスマートです。
break
,case
ステートメントが不要になり、さらに強力なパターンマッチングが使えるようになりました。
例で比較するとこのようになります。
曜日のenumを引数としてうけとり、なんらかの文字列をコンソールに出力するメソッドがあったとして、このようになります。
private static void PrintDayOld(DayOfWeek day)
{
string text;
switch (day)
{
case DayOfWeek.Sunday:
text = "休日";
break;
case DayOfWeek.Saturday:
text = "だいたい休日";
break;
default:
text = "まれに休日";
break;
}
Console.WriteLine(text);
}
👇
private static void PrintDayNew(DayOfWeek day)
{
var text = day switch
{
DayOfWeek.Sunday => "休日",
DayOfWeek.Saturday => "だいたい休日",
_ => "まれに休日"
};
Console.WriteLine(text);
}
コードスニペット
そんな便利なswitch式ですが、私は記憶力激弱なので、書く時に「あれswitchって条件のまえだっけ?」「caseはいらないんだっけ?」と混乱してしまいます。
一度switch文を書いて、VisualStudioにswitch式にリファクタリングしてもらってもよいですが、そもそもswitch文が長くてダサいからswitch式にしたいので書きたくないです。
なのでコードスニペットを自作してVisualStudioに追加しました。
<?xml version="1.0" encoding="utf-8"?>
<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
<CodeSnippet Format="1.0.0">
<Header>
<SnippetTypes>
<SnippetType>Expansion</SnippetType>
</SnippetTypes>
<Title>SwitchExpression</Title>
<Author>soi</Author>
<Description>switch 式を生成します。</Description>
<Shortcut>switchex</Shortcut>
</Header>
<Snippet>
<Declarations>
<Literal Editable="true">
<ID>expressionswitch</ID>
<ToolTip>expression switch</ToolTip>
<Default>expression</Default>
</Literal>
<Literal Editable="true">
<ID>case1</ID>
<Default>case1</Default>
</Literal>
<Literal Editable="true">
<ID>value1</ID>
<Default>value1</Default>
</Literal>
<Literal Editable="true">
<ID>defaultValue</ID>
<Default>defaultValue</Default>
</Literal>
</Declarations>
<Code Language="csharp" Delimiter="$"><![CDATA[$expressionswitch$ switch
{
$case1$ => $value1$,
_ => $defaultValue$
};]]></Code>
</Snippet>
</CodeSnippet>
</CodeSnippets>
使用方法
SwitchExpression.snippet -GitHub
上記リンクからダウンロードしたファイルを
VisualStudio>ツール>コードスニペットマネージャー>インポート
で選択してください。
switchex
と入力すると下記コードに変換されます。expression
などはTabでジャンプできます。
expression switch
{
case1 => value1,
_ => defaultValue
};
参考
環境
VisualStudio 2019
C# 8
.NET Core 3.1