Почему я должен явно окружать «непроверенным»?

Кто-нибудь может объяснить мне это странное поведение?

    int i = 0x1234;
    byte b1 = (byte)i;
    byte b2 = (byte)0x1234;         //error: const value '4660' can't convert to byte (use unchecked)
    byte b3 = unchecked((byte)0x1234);
    byte b4 = checked((byte)i);     //throws
    byte b5 = (byte)(int)0x1234;    //error: same as above

ПРИМЕЧАНИЕ. Это пустое консольное приложение сНЕТ арифметическая проверка включена (по умолчанию). Спасибо всем заранее.

РЕДАКТИРОВАТЬ: Я должен был быть достаточно ясным, но не для всех.

Я знаю, что слово не может вписаться в байт. Но, по умолчанию, программа на C # допускает определенные «опасные» операции, прежде всего по соображениям производительности.

Точно так же я могу суммировать два больших целых числа без переполнения.

Мое удивление было из-за ошибки времени компиляции выше: приведение / назначение b1 скомпилировано, b2 не может скомпилироваться. Видимо, нет никакой разницы, потому что оба Int32 имеют одинаковое значение.

Надеюсь, теперь все ясно.

Ответы на вопрос(3)

Ваш ответ на вопрос