Вопрос из собеседования на .NET разработчика

Был вопрос, что будет выведено на консоль в результате выполнения следующего кода:

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

Я на этот вопрос ответила неправильно. Подскажите пожалуйста правильный ответ, и почему именно этот ответ будет правильным

using System;
    public class Program
    {
        public static void Main()
        {
            int i = 1;
            object obj = i;
              i;
            Console.WriteLine(i);
            Console.WriteLine(obj);

            //Console.WriteLine((short)obj); исключение "невозможно привести тип"

            Console.WriteLine(typeof(Int32) == obj.GetType()); // obj, логично, имеет тип Int32, но мы на всякий случай удостоверимся

            Console.WriteLine((short)1); //здесь ошибки не возникает, тобишь Int32 спокойно можно привести к типу short
            //Console.WriteLine((short)obj); //а вот здесь возникает, не смотря на то, что значение переменной obj равно 1

            Console.WriteLine((double)obj); //ошибка есть
            Console.WriteLine(Convert.ToDouble(obj)); //ошибки нет
        }
    }

Почему это так? - Потому что преобразование этих типов не разрешено. Нельзя просто взять и преобразовать тип int в short, doulbe и тд. Конвертировать - можно, преобразовать - нет.

Почему же когда передавать единицу то всё нормально получается? Да потому что компилятор прекрасно понимает что вы хотите сделать и не преобразовывает её, поскольку в этом просто нет смысла. Он пишет ту самую единицу, но единица эта всё равно остаётся целочисленной.