출력 결과는 대체로 간단하지만, 마지막 줄의 출력 결과에 사뭇 놀랄 수도 있다.
Input is string hello
Input is long 5
Input didn't match hello, long 5 or int 10
Input is int 10
Input didn't match hello, long 5 or int 10
정숫값을 비교할 때 ==을 사용한다면 Match(10L)은 왜 매칭되지 않았을까? 그 이유는 input의 컴파일 타임 타입이 정수 타입이 아니기 때문이다. 따라서 컴파일러는 object.Equals(x, 10)을 호출하는 코드를 생성하게 된다. 이제 마지막 Match 메서드를 호출했을 때처럼 x가 Int32가 아니라 Int64로 박싱되면 결괏값은 false가 된다. ==이 사용되도록 하려면 다음과 같이 코드를 작성하면 된다.
long x = 10L;
if (x is 10)
{
Console.WriteLine("x is 10");
}
하지만 is를 이와 같이 사용하는 것은 전혀 유용하지 않다. 이와 같이 정수 상수를 사용해야 한다면 switch 문(사전-패턴-매칭 switch 문)을 사용하는 것이 훨씬 유용하다. 역시 가장 유용한 패턴은 타입 패턴이 아닌가 싶다.