Как изменяются поля структуры при инкременте, присваивании и упаковке

Программа выведет 1 2 2 3. Структуры копируются при присваивании, упаковке и явной распаковке; Inc меняет именно тот экземпляр, на котором вызван.

Короткий ответ

Что ответить на собеседовании

Программа выведет 1 2 2 3. Структуры копируются при присваивании, упаковке и явной распаковке; Inc меняет именно тот экземпляр, на котором вызван.

Подробный разбор

Ответ с пояснениями

Условие

Определите, какой текст появится в консоль после выполнения метода DoStuff().

struct S
{
    public int X;

    public S Inc()
    {
        X++; return this;
    }

    public static void DoStuff()
    {
        var a = new S();
        var b = a.Inc();
        object c = b.Inc();
        object d = ((S)c).Inc();

        Console.WriteLine($"{a.X} {b.X} {((S)c).X} {((S)d).X}");
    }
}

Ответ

Программа выведет 1 2 2 3. Структуры копируются при присваивании, упаковке и явной распаковке; Inc меняет именно тот экземпляр, на котором вызван.

a.Inc увеличивает a.X до 1 и возвращает копию в b. Затем b.Inc меняет b.X на 2, а возвращённая структура упаковывается в c.

Выражение (S)c создаёт распакованную копию со значением 2. Inc увеличивает эту временную копию до 3, и результат снова упаковывается — теперь в d. Сам упакованный объект c при этом не изменяется. Поэтому a = 1, b = 2, c = 2, d = 3.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее