Con gran sorprendió he observado lo siguiente comportamiento de hoy: Dada una clasecambio de propiedades de IEnumerator <T> .Current
class Foo
{
prop int FooNumber { get; set; }
}
y este código
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
al inicializar foos
-new List<Foo>{ new Foo(), new Foo(), new Foo() }
hace que la escritura de bucle " 555 ".
Mi pregunta: ¿Por qué sucede esto y hay una manera de eludir esto sin usar .ToList()
(que necesita un comentario, ya que no parece ser necesario aquí).
Bienvenido al maravilloso mundo de lo que ReSharper llamaría "posible enumeración múltiple". Un enumerable es ** no ** una colección. El hecho de que a veces un enumerable está sobre una colección y puede modificarlo debajo es un efecto secundario. –