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

**URL:** <https://forum.itvdn.com/t/vopros-iz-sobesedovaniya-na-net-razrabotchika/2617>\
**Category:** C# / .NET Developer\
**Created:** [19.10.2018 11:10:51 UTC](https://forum.itvdn.com/t/vopros-iz-sobesedovaniya-na-net-razrabotchika/2617 "2018-10-19T11:10:51Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![len0k12](https://forum.itvdn.com/letter_avatar_proxy/v4/letter/l/eb9ed0/32.png) [@len0k12](https://forum.itvdn.com/u/len0k12)\
**Post date:** [19.10.2018 11:10:51 UTC](https://forum.itvdn.com/t/vopros-iz-sobesedovaniya-na-net-razrabotchika/2617/1 "2018-10-19T11:10:51Z")

</div>

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

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

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

---

<div class="post-metadata">

**Author:** ![volklenam](https://forum.itvdn.com/letter_avatar_proxy/v4/letter/v/eb8c5e/32.png) [@volklenam](https://forum.itvdn.com/u/volklenam)\
**Post date:** [19.10.2018 11:56:35 UTC](https://forum.itvdn.com/t/vopros-iz-sobesedovaniya-na-net-razrabotchika/2617/2 "2018-10-19T11:56:35Z")

</div>

```
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 и тд. Конвертировать - можно, преобразовать - нет.

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