Следующая программа не компилируется:
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 };
Логично, что это законно, мне более интересно, что компилятор делает здесь.