이 경우에는 당연히 switch 문을 사용하는 것이 가장 좋은 대안이 되겠지만, 코드에 대체할 as/if 구문이 하나밖에 없다면 switch 문으로 변경하는 것이 다소 지나칠 수 있다. 타입 패턴은 일반적으로 as/if를 조합한 형태나 if 문에 is를 사용한 후 타입 변환을 수행하는 형태를 대체하는 용도로 주로 사용된다. 테스트하려는 타입이 일반적인 값 타입이라면 반드시 후자의 방법을 사용해야 한다.
타입 패턴 내에서는 null 가능 값 타입을 지정할 수 없다. 하지만 타입 매개변수를 사용할 수는 있고, 런타임 시에 이 타입 매개변수에 null 가능 값 타입을 지정하는 것은 가능하다. 이 경우 값이 null이 아닐 때만 패턴이 일치하는지 확인한다. 다음 코드는 제네릭 메서드의 타입 인수로 int?를 사용하는 예제다. 이 메서드는 전달받은 타입 인수를 패턴 매칭에 이용한다. int?를 타입 인수로 전달하면 직접 코딩해서는 컴파일되지 않는 value in int? t 형태의 타입 매칭이 가능하다.
예제 12-14 타입 패턴 내에서 null 가능 값 타입을 사용 ▶ TypePatternWithNullableType.cs
static void Main()
{
CheckType<int?>(null);
CheckType<int?>(5);
CheckType<int?>("text");
CheckType<string>(null);
CheckType<string>(5);
CheckType<string>("text");
}
static void CheckType<T>(object value)
{
if (value is T t)
{
Console.WriteLine($"Yes! {t} is a {typeof(T)}");
}
else
{
Console.WriteLine($"No! {value ?? "null"} is not a {typeof(T)}");
}
}