Вызов .ToList()
заставляет стремиться выполнить полное перечисление - результатом этого является отдельный список от исходного перечисления, поэтому любые изменения после .ToList()
не будут отражены в этом списке.Фактические элементы в этом списке те же (те же ссылки на объекты), что и в исходном перечислении, как указывал @Johannes Rudolph - так что да, это мелкая копия.
IEnumerable<test>
хотя будет лениво выполняется над исходной коллекцией - только при активном перечислении элементов (т. Е. С помощью foreach
или .ToList()
) перечисление создаст перечислитель, который будет принимать исходную коллекцию такой, какой она есть в данный момент времени - это означает, чтоесли в базовой коллекции есть изменения до создания перечислителя, они будут отражены в перечислении.