This is where a well-placed .ToList() is called for, to reify avoid re-evaluating the enumeration.
e.g.
var classes = Names.Select(x => new PersonStruct { Name = x }).ToList();
for (var i = 0; i < classes.Count; i++)
e.g.
var classes = Names.Select(x => new PersonStruct { Name = x }).ToList();
for (var i = 0; i < classes.Count; i++)
In contrast, in Python, initial use exhausts generators. Subsequent iterations turns up empty. A gotcha, but also a way to highlight misuse, as it should show up in testing.