런타임 시 튜플 요소의 이름이 존재하지 않는 경우
앞서 살펴본 내용이 뭔가 석연치 않게 느껴지더라도 런타임 시에는 튜플 요소의 이름이라는 개념이 없다는 사실 하나는 확실히 알아 두자. 튜플 타임에 대해 GetType()을 호출해 보면 튜플 요소의 타입이 반영된 ValueTuple<…> 타입을 얻을 수 있다. 하지만 코드에서 사용했던 튜플 요소의 이름은 어디에서도 발견할 수 없다. 단계별 디버깅을 수행할 때 튜플 요소의 이름이 출력된 것은 튜플 요소의 이름을 가진 추가적인 정보를 사용할 수 있었기 때문일 뿐, CLR이 튜플 요소의 이름을 직접 알고 있는 것은 아니다.
Note ≡
자바 개발자라면 이런 방식에 이미 익숙할 것이다. 이는 런타임 시에는 존재하지 않는 타입인 제네릭 타입을 다루는 방식과 매우 유사하기 때문이다. 자바에서는 ArrayList<Integer> 객체나 ArrayList<String> 객체란 존재하지 않는다. 이 둘은 모두 그저 ArrayList 객체일 뿐이다. 자바는 이로 인해 상당한 고초를 치르고 있다. 이에 반해 튜플의 요소 이름은 제네릭의 타입 인수처럼 본질적인 핵심 기능과 거리가 있기 때문에 자바처럼 큰 문제가 발생할 것 같지는 않다.
튜플의 요소 이름은 C# 언어 차원에서만 존재하며 CLR 차원에서는 존재하지 않는다. 다음으로 살펴볼 내용은 튜플 간의 변환을 다룬다.