더북(TheBook)

11.2.2 튜플 리터럴에서 추론된 요소 이름(C# 7.1)

C# 7.0에서는 튜플 요소의 이름을 지정하려면 반드시 코드상에서 명시적으로 지정해야 했다. 튜플 리터럴 내의 요소 이름은 통상 그 값을 제공하는 속성이나 지역 변수의 이름을 그대로 차용하는 경우가 많기 때문에 이는 중복 작업처럼 느껴지곤 했다. 아주 간단한 예로 다음 코드를 보자.

var result = (min: min, max: max);

이처럼 단순히 변수의 이름을 사용했을 때만 추론이 이루어지는 것은 아니다. 튜플을 초기화할 때는 특정 객체의 속성을 사용하기도 한다. 이러한 방식은 특히 LINQ 코드에서 프로젝션(projection)을 수행할 때 자주 사용되곤 한다.

C# 7.1에서는 익명 타입에서 이름을 추론하는 것과 동일한 방식으로 튜플 요소의 이름을 그 값을 지정한 변수나 속성의 이름으로부터 추론한다. 이 기능이 얼마나 유용한지 살피기 위해 두 개의 컬렉션을 합하여 직원의 이름, 직함, 부서명을 포함하는 객체를 새롭게 생성하는 세 가지 쿼리 예제를 살펴볼 것이다. 우선 익명 타입과 LINQ를 사용한 예다.

from emp in employees
join dept in departments on emp.DepartmentId equals dept.Id
select new { emp.Name, emp.Title, DepartmentName = dept.Name };

다음은 명시적으로 이름을 지정한 형태로 튜플을 사용한 예다.

from emp in employees
join dept in departments on emp.DepartmentId equals dept.Id
select (name: emp.Name, title: emp.Title, departmentName: dept.Name);
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.