LoginSignup
9
8

More than 3 years have passed since last update.

C# 8.0のswitch式が書きやすくなるコードスニペット

Last updated at Posted at 2020-07-25

switch式

C# 8.0で追加されたswitch式は前からあったswitch文にくらべると格段にスマートです。
break,caseステートメントが不要になり、さらに強力なパターンマッチングが使えるようになりました。
例で比較するとこのようになります。

曜日のenumを引数としてうけとり、なんらかの文字列をコンソールに出力するメソッドがあったとして、このようになります。

switch文
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);
}

👇

switch式
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に追加しました。

SwitchExpression.snippet
<?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

9
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
8