Почему const int неявно приводится к байту, а переменная int - нет?

Следующая программа не компилируется:

   class Program
   {
      static void Main(string[] args)
      {
         int x = 50;
         Byte[] y = new Byte[3] { x, x, x };
      }
   }

Неудивительно, что я получу ошибку Cannot implicitly convert type 'int' to 'byte'

Однако, если я сделаю x константой, то она скомпилируется:

   class Program
   {
      public const int x = 50;

      static void Main(string[] args)
      {
         Byte[] y = new Byte[3] { x, x, x };
      }
   }

Мне интересно, что здесь происходит. Если int нельзя неявно привести к байту, то компилятор создает "байтовую" версию моей const на лету, или он компилирует ее так же, как если бы я сделал явную приведение, поскольку считает значение константы "безопасным" для байта? Возможно, компилятор интерпретирует это так, как если бы я написал:

Byte[] y = new Byte[3] { 50, 50, 50 };

Логично, что это законно, мне более интересно, что компилятор делает здесь.

6
задан Mike Christensen 29 January 2012 в 01:18
поделиться