Почему ошибка?

В процессе "развлечений" с цифрами, появился вопрос

            int a = 256;
        byte b = (byte)a;
        Console.WriteLine(b);</pre>

Вот это выполняется без проблем. До 255 включительно переменная b спокойно принимает значение переменной a. Дальше идёт по циклу и начинается с нуля.

Но вот если взять и сделать переменную a константой, то начинаются проблемы:

            const int a = 256;
        byte b = (byte)a;
        Console.WriteLine(b);</pre>

До 255 тоже без проблем, а вот дальше даже с явным приведением типа, всё равно выбивает ошибку.

Почему возникает эта ошибка, и как можно обойти компилятор и таки провести операцию?

Используй unchecked

            const int a = 256;
        unchecked
        {
            byte b = (byte)a;
            Console.WriteLine(b);
        }</pre>

Компилятор "сожрёт" всё

А вообще ошибка возникает потому что тип byte принимает значения от 0 до 255 включительно, но не более того. Когда у тебя переменная - значение автоматически переводится по циклю (0 - 255, затем 256 снова становится 0). Когда же у тебя константа - значение автоматически перевестись не может, и в результате ты записываешь значение , которое переходит за рамки допустимых, вот и возникает исключение.