Por que a primeira e a segunda gravação funcionam, mas não a última? Existe uma maneira de permitir todos os 3 e detectar se foi 1, (int) 1 ou eu passei? E realmente por que um é permitido, mas o último? O segundo sendo permitido, mas não o último, realmente me impressiona.
Demonstração para mostrar erro de compilação
using System;
class Program
{
public static void Write(short v) { }
static void Main(string[] args)
{
Write(1);//ok
Write((int)1);//ok
int i=1;
Write(i);//error!?
}
}
(short) i
.