Изменение свойств IEnumerator.Current

С большим удивлением я наблюдал сегодня следующее поведение :Учитывая класс

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()(который нуждается в комментарии, так как здесь он, кажется, не нужен ).

10
задан Jens 10 July 2012 в 10:14
поделиться