z wielkim zaskoczony zaobserwowałem następujące zachowanie dzisiaj: Biorąc pod uwagę klasęZmienianie właściwości IEnumerator <T> .aktualnie
class Foo
{
prop int FooNumber { get; set; }
}
i ten kod
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
podczas inicjalizacji foos
do new List<Foo>{ new Foo(), new Foo(), new Foo() }
sprawia, że zapis w pętli " 555 ".
Moje pytanie: Dlaczego tak się dzieje i czy istnieje sposób na obejście tego bez użycia .ToList()
(który potrzebuje komentarza, ponieważ nie jest tu potrzebny).
Witaj w cudownym świecie tego, co ReSharper nazwałby "możliwym wielokrotnym wyliczeniem". Wyliczalny to ** nie ** zbiór. Fakt, że czasami wyliczany jest nad kolekcją i można ją modyfikować pod spodem, jest efektem ubocznym. –