11.4.2 튜플 요소 이름 처리
실제로 C# 컴파일러는 C#의 튜플 타입을 CLR의 ValueTuple<…> 타입으로 매핑할 때 튜플 요소의 이름을 무시한다. C# 차원에서는 (int, int)와 (int x, int y)가 다른 타입일지 몰라도 CLR 차원에서는 둘 다 ValueTuple<int, int>로 매핑될 뿐이다. 다음으로 컴파일러는 각 튜플 요소에 명명된 이름을 해당하는 ItemN 이름과 매핑한다. 그림 11-7은 C# 코드로 표현된 튜플 리터럴이 컴파일의 결과로 CLR의 관점에서는 어떻게 보여지는지를 나타내고 있다.
▲ 그림 11-7 컴파일러가 C#의 튜플 타입을 ValueTuple로 어떻게 변환하는지 보여주는 예
그림 11-7의 아래쪽 결과를 보면 튜플 요소에 명명된 이름 정보가 모두 사라졌음을 알 수 있다. 지역 변수처럼 제한된 메서드 내에서만 한정적으로 사용된 튜플 요소의 이름은 오직 컴파일 시에만 사용된다. 런타임 시에 이러한 이름 정보를 추적하려면, 컴파일 시 함께 생성한 PDB 파일 내부에 기록된 디버깅 정보를 활용하는 것이 유일한 방법이다. 만약 튜플 요소의 이름이 메서드를 벗어나서도 계속 사용되면 어떨까?