Ответ 1
Это происходит потому, что foos
динамически создается каждый раз, когда вы перечисляете его. Поэтому во время первой итерации вы устанавливаете значения свойств для объектов, которые больше не ссылаются ни на что после окончания итерации. Вторая итерация работает на только что построенных объектах, которые имеют значение свойства по умолчанию.
Инициализация foos
в список "постоянных" объектов изменяет вещи, как и при использовании .ToList()
по той же причине ( "фиксированный" список строится и повторяется дважды, исходный динамически созданный IEnumerable
повторяется один раз).
Установив, что вы должны использовать .ToList()
здесь: в общем, я не чувствую, что ему нужен комментарий, потому что он не является обычным для итерации по динамически созданным последовательностям более одного раза (я считаю, что многие инструменты анализа кода предупреждают об этом), но обязательно напишите один.