int i = 1;

Код выведет 2, затем 1, после чего выбросит InvalidCastException. В obj упакована копия int, а прямое распаковывание её как short недопустимо.

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

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

Код выведет 2, затем 1, после чего выбросит InvalidCastException. В obj упакована копия int, а прямое распаковывание её как short недопустимо.

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

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

Условие

int i = 1; object obj = i; ++i; Console.WriteLine(i); Console.WriteLine(obj); Console.WriteLine((short)obj);

Ответ

Код выведет 2, затем 1, после чего выбросит InvalidCastException. В obj упакована копия int, а прямое распаковывание её как short недопустимо.

При object obj = i значение 1 копируется в отдельный boxed int. Последующее ++i меняет только локальную переменную, поэтому выводы i и obj различаются.

Unboxing требует соответствующего упакованному значению типа. Сначала нужно извлечь int и только затем преобразовать число: Console.WriteLine((short)(int)obj);. В этом примере результат был бы 1. Для произвольного значения сужающее преобразование требует проверки диапазона, например checked.

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

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

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

Подробнее