¿Por qué tengo que envolver este código en un molde a corto?

Si tengo algún código como el siguiente:

short myShortA = 54; short myShortB = 12; short myShortC = (short)(myShortA - myShortB); 

Ambos operandos son cortos y se van a poner cortos, ¿por qué tengo que lanzarlo?

Porque no hay operador “corto – corto”. Ambos operandos son promovidos a int.

De la sección 7.7.5 de la especificación C # 3:

Los operadores de resta predefinidos se enumeran a continuación. Todos los operadores restan y de x.

  • Resta de enteros:

     int operator –(int x, int y); uint operator –(uint x, uint y); long operator –(long x, long y); ulong operator –(ulong x, ulong y); 

    En un contexto marcado, si la diferencia está fuera del rango del tipo de resultado, se lanza una excepción System.OverflowException.

(Y luego hay una resta de punto flotante).

Para hacer las cosas un poco más fáciles, simplemente puede escribir un método de extensión como este:

 public static class NumericExtensions { public static short Subtract(this short target, short value) { return (short)(target - value); } } 

Otros han contestado tu pregunta … 🙂