이름과 위치를 이용하여 튜플 요소에 접근하는 방법
튜플 내의 모든 변수는 명명된 이름 이외에 위치를 기반으로 참조할 수 있지만, 개별 요소를 ItemN 형태로 접근하는 데는 일부 제약이 있음을 상기해 보자. 개별 요소는 단일의 변수로 구성되므로 실제로 튜플 내의 요소에 두 가지 방법으로 접근할 수 있다. 이를 보여주는 간단한 예를 살펴보자.
예제 11-2 이름과 위치를 기반으로 튜플의 요소를 읽고 쓰기 ▶ ElementAccess.cs
var tuple = (x: 5, 10);
➊
Console.WriteLine(tuple.x);
Console.WriteLine(tuple.Item1);
Console.WriteLine(tuple.Item2); ----- 두 번째 요소는 이름을 가지지 않고, 위치 정보만을 이용할 수 있음
tuple.x = 100; ----- 이름을 이용하여 첫 번째 요소의 값을 변경
Console.WriteLine(tuple.Item1); ----- 위치 정보를 이용하여 첫 번째 요소의 값을 출력(100을 출력)
➊ 이름과 위치를 이용하여 첫 번째 요소를 출력
우선 (Item1: 10, 20)은 가능하지만 (Item2: 10, 20)은 허용되지 않는다. 첫 번째는 요소의 이름을 중복해서 명명한 형태이지만, 두 번째는 Item2라는 이름으로 첫 번째 요소(이름으로)를 참조할지 두 번째 요소(위치로)를 접근할지 모호해진다. 또한 두 개의 요소만 가지는 튜플 리터럴을 (Item5:10, 20)과 같이 사용하는 것이 허용되리라 생각할 수 있는데, 기술적인 관점에서 보면 이 표현식이 전혀 모호하지 않긴 해도 여전히 사용자의 혼란을 가중할 가능성이 있어 허용되지 않는다.
이제 튜플은 생성 후에도 값을 변경할 수 있다는 것을 알았으므로 현재까지의 최솟값과 최댓값을 나타내기 위해서 min과 max 변수를 각각 사용하지 않고, 튜플 타입의 지역 변수 하나만 사용하도록 MinMax 메서드를 재작성할 수 있을 것이다. 다음에 그 예를 나타냈다.