---
# System prepended metadata

title: C# switch セクション内の when 句 2021-07-11
tags: [C#, switch, when]

---

---
lang: ja-jp
breaks: true
---
# C# switch セクション内の when 句 2021-07-11

## case ステートメントおよび when 句
> C# 7.0 以降では、case ステートメントは相互に排他的である必要がないため、when 句を追加して、case ステートメントを true に評価するために満たされなければならない条件を指定できます。 when 句には、ブール値を返す任意の式を指定できます。
> https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/keywords/switch#the-case-statement-and-the-when-clause

```csharp=
   private static void ShowShapeInfo(Shape sh)
   {
      switch (sh)
      {
         // Note that this code never evaluates to true.
         case Shape shape when shape == null:
            Console.WriteLine($"An uninitialized shape (shape == null)");
            break;
         case null:
            Console.WriteLine($"An uninitialized shape");
            break;
         case Shape shape when sh.Area == 0:
            Console.WriteLine($"The shape: {sh.GetType().Name} with no dimensions");
            break;
         case Square sq when sh.Area > 0:
            Console.WriteLine("Information about square:");
            Console.WriteLine($"   Length of a side: {sq.Side}");
            Console.WriteLine($"   Area: {sq.Area}");
            break;
         case Rectangle r when r.Length == r.Width && r.Area > 0:
            Console.WriteLine("Information about square rectangle:");
            Console.WriteLine($"   Length of a side: {r.Length}");
            Console.WriteLine($"   Area: {r.Area}");
            break;
         case Rectangle r when sh.Area > 0:
            Console.WriteLine("Information about rectangle:");
            Console.WriteLine($"   Dimensions: {r.Length} x {r.Width}");
            Console.WriteLine($"   Area: {r.Area}");
            break;
         case Shape shape when sh != null:
            Console.WriteLine($"A {sh.GetType().Name} shape");
            break;
         default:
            Console.WriteLine($"The {nameof(sh)} variable does not represent a Shape.");
            break;
      }
   }
```

###### tags: `C#` `switch` `when`
