예제 12-16 변수에 문제가 있을 때 var 패턴을 이용하여 대응 ▶ ShapePerimeterWithPatternsSwitchCaseUsingVar.cs
static double Perimeter(Shape shape)
{
switch (shape ?? CreateRandomShape())
{
case Rectangle rect:
return 2 * (rect.Height + rect.Width);
case Circle circle:
return 2 * PI * circle.Radius;
case Triangle triangle:
return triangle.SideA + triangle.SideB + triangle.SideC;
case var actualShape:
throw new InvalidOperationException(
$"Shape type {actualShape.GetType()} perimeter unknown");
}
}
이 코드를 조금 변형해서 actualShape를 switch 문 이전에 초기화하고, switch 내부에서는 기존처럼 default를 이용할 수도 있다.
지금까지 C# 7.0에서 소개된 패턴 매칭을 모두 살펴봤다. 그리고 패턴 매칭을 사용할 수 있는 두 가지 문맥(is 연산자와 switch 문)도 알아봤다. 이제 각각의 경우에 대해 좀 더 자세히 살펴보자.