마지막으로 C# 7.1에서 요소의 이름을 추론한 예다.
from emp in employees
join dept in departments on emp.DepartmentId equals dept.Id
select (emp.Name, emp.Title, DepartmentName: dept.Name);
바로 앞의 코드와 비교했을 때 튜플 요소의 이름에서 대소문자가 달라지기는 했지만, 간결한 코드를 유지하면서 동시에 유용한 이름으로 튜플을 만든다.
LINQ 쿼리에 대한 예만 살펴보긴 했지만, 실제로 이러한 추론 기능은 튜플 리터럴이 사용되는 곳이라면 어디든 사용될 수 있다. 예를 들어 Count, Min, Max라는 이름을 가진 튜플을 작성하려면, 다음과 같이 일부 요소는 추론 기능을 이용하고 나머지는 명시적으로 요소의 이름을 지정할 수도 있다.
List<int> list = new List<int> { 5, 1, -6, 2 };
var tuple = (list.Count, Min: list.Min(), Max: list.Max());
Console.WriteLine(tuple.Count);
Console.WriteLine(tuple.Min);
Console.WriteLine(tuple.Max);
여기서 Min과 Max는 메서드를 호출하여 얻은 값을 이용했으므로 Min, Max라는 이름을 명시적으로 지정했다. 메서드를 호출해서 값을 얻어오는 경우에는 튜플 요소뿐 아니라 익명 타입 속성에 대해서도 이름 추론이 수행되지 않는다.
몇 가지 주의할 부분도 있는데, 여러 요소에서 추론된 이름이 충돌할 경우 추론된 이름이 사용되지 않는다. 추론된 이름과 명시적으로 지정한 이름이 충돌할 경우 명시적으로 지정한 이름이 그대로 사용되고 추론된 이름은 사용되지 않는다. 이제까지 튜플 타입과 튜플 리터럴의 사용법을 살펴봤다면, 지금부터는 이를 어떻게 활용할 수 있을지 살펴보자.