A named tuple groups related values without declaring a class or struct. In C#, a tuple can give its elements names; unnamed elements are accessed as Item1, Item2, and so on. section 3.1.1
Listing 3.13 Modifying AllFonts to return a tuple
public static
Lazy<IEnumerable<(string Name, FiggleFont Font)>> #1
AllFonts = new (() =>
from p in typeof(FiggleFonts)
.GetProperties(
BindingFlags.Public | BindingFlags.Static)
select ( #1
Name: p.Name, #2
Font: (p.GetValue(null) as FiggleFont) #3
));
AllFonts returns pairs of font names and FiggleFont objects. The declared tuple type names the elements Name and Font, and the LINQ projection supplies their values. section 3.1.1
Keeping both values lets a request filter and sort by Name while checking Font.Direction. It avoids creating a separate type just to carry the pair through the query. section 3.1.1


