2009-10-10 7 views

Respuesta

11

Porque no hay operador "corto - corto". Ambos operandos se promueven a int.

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

operadores de la resta predefinido se enumeran a continuación. Los operadores todos restan x.

  • Entero resta:

    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 comprobado, si la diferencia es fuera del rango del tipo de resultado, un System.OverflowException es lanzada.

(. Y luego está flotando punto de sustracción)

+0

Si solo permitieran los operadores de extensión ...;) – RCIX

+1

Eric Lippert comentó sobre esto (en lo que respecta a Enums) : http://blogs.msdn.com/ericlippert/archive/2005/10/19/fyi-c-2-0-has-a-breaking-change-in-enum-subtraction.aspx – jasonh

+0

A menudo he deseado esto en algunos idiomas ... pero luego recuerdo cuántas personas abusarían de él. –

1

Para hacer las cosas un poco más fácil, simplemente puede escribir un método de extensión de esta manera:

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

Otros han respondido su pregunta ... :)

Cuestiones relacionadas