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