이 경우에도 text는 해당 범위 전체에서 유효하지만, 항상 할당이 이루어지는 것은 아니다. 이름 공간을 좀 더럽히더라도 다양한 방법으로 값을 얻어올 수 있도록 하려면 이 방법이 상당히 유용하다. 다음 예를 보자.
if (input is string text)
{
Console.WriteLine("Input was already a string; using that");
}
else if (input is StringBuilder builder)
{
Console.WriteLine("Input was a StringBuilder; using that");
text = builder.ToString();
}
else
{
Console.WriteLine(
$"Unable to use value of type ${input.GetType()}. Enter text:");
text = Console.ReadLine();
}
Console.WriteLine($"Final result: {text}");
text는 if 문 밖에서도 사용해야 하기 때문에 전체 범위에서 유효해야 한다. 그리고 text에 두 가지 방법 중 한 가지 방법으로 값을 할당한다. builder 변수는 중간 블록에서만 일시적으로 사용될 뿐이지만, 다른 방법이 없다.