No puedo entender por qué se compila el siguiente código.¿Por qué el compilador de C# no se queja con Overflow por este obvio 'casting' malo?
public void Overflow()
{
Int16 s = 32767;
s = (Int16) (s + 1);
}
En el momento de la compilación, es evidente que (s + 1) no es un Int16 más como sabemos el valor de s.
Y CLR permite la fundición a:
- Para su propio tipo
- o cualquiera de las bases tipos (porque es seguro)
Como Int32 no es Int16 y Int16 es no tipo base de Int32.
Pregunta: ¿Por qué el compilador no falla para el casting anterior? ¿Puede por favor explicarlo desde el punto de vista CLR y compilador?
Gracias
Utiliza el molde para * suprimir * el desbordamiento. Si quieres uno, entonces usa Convert.ToInt16() en su lugar. –