2009-10-10 12 views

Odpowiedz

11

Ponieważ nie ma operatora "krótki - krótki". Oba operandy są promowane do int.

Z sekcji 7.7.5 z C# 3 specyfikacji:

operatorom predefiniowany odejmowanie są wymienione poniżej. Operatory wszystkie odejmują y od x.

  • Integer odejmowanie:

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

    W sprawdzonej kontekście, jeśli różnica jest poza zasięgiem typu wynikowego, System.OverflowException jest wyrzucane.

(. A wtedy nie zmiennoprzecinkowych odejmowanie)

+0

Jeśli tylko pozwolili operatorom rozszerzeń ...;) – RCIX

+1

Eric Lippert skomentował to (w odniesieniu do Enums) : http://blogs.msdn.com/ericlippert/archive/2005/10/19/fyi-c-2-0-has-a-breaking-change-in-enum-subtraction.aspx – jasonh

+0

Często chciałem to w kilku językach ... ale potem pamiętam, ilu ludzi nadużywa tego. –

1

Żeby było trochę łatwiej, można po prostu napisać metodę rozszerzenia takiego:

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

Inni odpowiedział twoje pytanie ... :)

Powiązane problemy