Должно существовать неявное значение от short
до int
, поскольку вы переходите от узкого к широкому, от широкого к узкому не поддерживается неявно из-за потенциальной потери данных. Компилятор позволяет вам игнорировать это, но требует, чтобы вы в явном виде приводили , чтобы указать, что вы поняли потенциал и с ним все в порядке.
Обновление:
Ваш код сужается и не может быть выполнен неявно. Исправлено:
public Int16 Test()
{
int i = 2;
return (Int16)i;
}
Хотя, чтобы быть шутливым, в этом конкретном случае компилятор теоретически может знать, что потеря данных не произойдет. В остальные 99,99% случаев он не может знать об этом во время компиляции, поэтому поддерживается только явное приведение, где может произойти потеря данных.
Это явно возлагает ответственность на разработчика, так что, когда возникает ошибка во время выполнения из-за потери данных, разработчик должен был бы сознательно принять это решение заранее и не имеет юридического права швырять ругательства на компьютер.
VB.NET позволяет обойти даже это ограничение с помощью Option Strict:
http://msdn.microsoft.com/en-us/library/k1e94s7e(v=vs.80).aspx
Итак, я предполагаю, что это выбор дизайна для C #.