С большим удивлением я наблюдал следующее поведение сегодня: учитывая класс
class Foo
{
prop int FooNumber { get; set; }
}
и этот код
IEnumerable<Foo> foos = Enumerable.Range(0,3).Select(new Foo());
foreach (var foo in foos)
foo.Bar = 5;
foreach (var foo in foos)
Console.Write(foo.Bar); // Writes 000
в то время как инициализация foos
до new List<Foo>{ new Foo(), new Foo(), new Foo() }
заставляет цикл записывать "555".
Мой вопрос: почему это происходит и есть ли способ обойти это без использования .ToList()
(которому нужен комментарий, поскольку он здесь не нужен).