Что выведет код Middle Типы значений и ссылочные обновлено
Изменение структуры в списке и массиве
Вопрос
Что выведет программа (.NET 8)? По строке на каждый вывод.
var arr = new S[] { new S { X = 1 } };
arr[0].X = 10;
Console.WriteLine(arr[0].X);
var list = new List<S> { new S { X = 1 } };
var item = list[0];
item.X = 10;
Console.WriteLine(list[0].X);
struct S { public int X; }
Попробуйте сами
Напишите, что выведет код: каждый вывод с новой строки.
Показать ответ и разбор
Коротко
Код выведет: 10, 1. Индексатор массива возвращает ссылку на элемент, поэтому arr[0].X = 10 меняет сам элемент: 10.
Что выведет
10
1
Разбор
Индексатор массива возвращает ссылку на элемент, поэтому arr[0].X = 10 меняет сам элемент: 10. Индексатор List<T> возвращает копию, и item это отдельная структура: в списке остаётся 1. Прямая запись list[0].X = 10 вообще не скомпилируется (ошибка CS1612).
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Термины по теме
Ещё по теме «Типы значений и ссылочные»
- Что такое boxing и unboxing
- Сравнение двух упакованных чисел через ==
- Когда происходит упаковка
- Переприсваивание параметра-класса
- default и конструктор структуры без параметров
- Число различных точек
- Сумма int с переполнением, как в unchecked
- Среднее с пропусками (int?)