Изменение источника после LINQ в C#
Запрос к List не копирует данные до
перебора. Если список изменить до foreach,
в результат попадёт новое значение.
После Add(3) перебор видит и добавленное число:
var nums = new List<int> { 1, 2 };
IEnumerable<int> q = nums.Select(n => n);
nums.Add(3);
Console.WriteLine(string.Join(",", q)); // выведет 1,2,3
Вызов ToArray сразу снимает копию. Запись в
исходный массив эту копию не меняет. В консоли
останется 1, хотя arr[0] уже равен 9:
int[] arr = [1, 2];
var snap = arr.Select(n => n).ToArray();
arr[0] = 9;
Console.WriteLine(snap[0]);
Сохраните запрос к списку имён в отдельный список, добавьте ещё одно имя и выведите сохранённые имена. Нового среди них быть не должно.