더북(TheBook)

그리고 return 문은 다음과 같이 작성했다.

return (min, max);

즉, 요소의 이름을 명명하지 않은 튜플 리터럴3(int min, int max)로 변환하려고 한 것이다. 이러한 변환은 당연히 유효하다(동작하지 않았다면 보여주지도 않았을 것이다). 그리고 편리하다. 요소의 이름은 튜플 리터럴의 변환과는 전혀 관련이 없다. 요소의 이름을 명명한 튜플 리터럴을 다른 튜플로 변환할 때 변환 대상 요소에 이름이 없거나 이름이 다른 경우, 컴파일러가 경고를 출력한다. 다음에 그 예를 나타냈다.

(int a, int b, int c, int, int) tuple =
    (a: 10, wrong: 20, 30, pointless: 40, 50);

이 코드는 요소 이름에 대한 가능한 모든 조합을 다음 순서대로 보여준다.

1. 대상 타입과 튜플 리터럴이 모두 동일한 요소 이름을 가진다.

2. 대상 타입과 튜플 리터럴이 모두 이름을 가지지만, 이름이 서로 다르다.

3. 대상 타입의 요소는 이름을 가지지만, 튜플 리터럴의 요소는 이름을 가지지 않는다.

4. 대상 타입의 요소는 이름을 가지지 않지만, 튜플 리터럴의 요소는 이름을 가진다.

5. 대상 타입과 튜플 리터럴의 요소는 모두 이름을 가지지 않는다.

 

두 번째와 네 번째는 컴파일 타임에 경고를 출력한다. 이 코드를 컴파일하면 출력 결과는 다음과 같다.

warning CS8123: 튜플 요소 이름 'wrong'은(는) 대상 형식 '(int a, int b, int c, int, int)'에서 다른 이름이 지정되었거나 이름이 지정되지 않았기 때문에 무시됩니다.
warning CS8123: 튜플 요소 이름 'pointless'은(는) 대상 형식 '(int a, int b, int c, int, int)'에서 다른 이름이 지정되었거나 이름이 지정되지 않았기 때문에 무시됩니다.

 

 


3 C# 7.0의 경우다. C# 7.1에서는 11.2.2절에서 언급한 것처럼 요소의 이름이 추론된다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.