Với ngạc nhiên tuyệt vời, tôi đã quan sát các hành vi sau đây hôm nay: Cho một lớpThuộc tính đang thay đổi của IEnumerator <T> .Current
class Foo
{
prop int FooNumber { get; set; }
}
và mã này
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
khi khởi tạo foos
-new List<Foo>{ new Foo(), new Foo(), new Foo() }
làm cho vòng ghi " 555 ".
Câu hỏi của tôi: Tại sao điều này xảy ra và có cách nào để phá vỡ whithout này bằng cách sử dụng .ToList()
(cần nhận xét vì có vẻ như không cần thiết ở đây).
Chào mừng bạn đến với thế giới tuyệt vời của những gì ReSharper gọi là "có thể liệt kê nhiều". Một liệt kê là ** không ** một bộ sưu tập. Thực tế là đôi khi một enumerable là hơn một bộ sưu tập và bạn có thể sửa đổi nó bên dưới là một tác dụng phụ. –