public class TestClass
{
public int Num { get; set; }
public string Name { get; set; }
}
IEnumerable<TestClass> originalEnumerable
= Enumerable.Range(1, 1).
Select(x => new TestClass() { Num = x, Name = x.ToString() });
List<TestClass> listFromEnumerable = originalEnumerable.ToList();
// false
bool test = ReferenceEquals(listFromEnumerable[0], originalEnumerable.ElementAt(0));
Если я модифицирую скопированный объект, оригинал не изменяется.Почему IEnumerable.ToList создает новые объекты
Я понимаю из этого, что коллекции System.Linq.IEnumerable<T>
всегда будут создавать новые объекты, даже если они являются ссылочными типами при вызове ToList()
/ToArray()
? Я что-то упускаю, потому что другие SO-вопросы настойчивы, только копии копируются.
И если вы установили ReSharper, это будет даже подчеркнут методы перечисления IEnumerable и сказать вам, об этом, что очень удобно. В неприятных сценариях многократное (ненужное) перечисление может стоить много времени. –