У меня возникли проблемы с пониманием того, что происходит, когда ToArray() вызывается в IEnumerable. Я всегда предполагал, что копируются только ссылки.Что происходит, когда ToArray() вызывается в IEnumerable?
Я хотел бы ожидать выход здесь, чтобы быть: истинное истинное
Но вместо этого я получаю правда ложь
Что здесь происходит?
class One {
public bool Foo { get; set; }
}
class Two
{
public bool Foo { get; set; }
}
void Main()
{
var collection1 = new[] { new One(), new One() };
IEnumerable<Two> stuff = Convert(collection1);
var firstOne = stuff.First();
firstOne.Foo = true;
Console.WriteLine (firstOne.Foo);
var array = stuff.ToArray();
Console.WriteLine (array[0].Foo);
}
IEnumerable<Two> Convert(IEnumerable<One> col1) {
return
from c in col1
select new Two() {
Foo = c.Foo
};
}
Чтобы быть ясным, проблема связана с комбинацией повторной итерации и создания новых объектов при каждом перечислении. Если перечисление вернуло исходные объекты - без создания новых экземпляров, то повторная итерация все равно будет извлекать исходный обновленный объект. –