2015-05-06 26 views
6

Wersja: Visual Studio Professional 2013 Update 4
Budowa param: Wolę 32-bit jest prawdąshort + short! = Short?

Nie rozumiem błąd w następujący kod C#:

short iCount = 20; 
short iValue = iCount + (short)1; 

dodając krótki do int odlewano do krótkich wyników w następujący błąd:

Cannot implicitly convert type 'int' to 'short'. An explicit conversion exists (are you missing a cast?)

powyższy błąd, także w następującym przypadku, jest całkowicie poprawny tutaj:

short iCount = 20; 
short iValue = iCount + 1; 

Poniższy obejście usuwa błąd:

short iCount = 20; 
short iValue = (short)(iCount + 1); 

Więc dodatek w postaci „krótki + Int32 stała” najwyraźniej działa, a wynik jest Int32, który musi zostać oddane do krótkiego.

Czy istnieje wyjaśnienie, dlaczego pierwszy kod zakończył się niepowodzeniem lub czy jest to błąd kompilatora? (które nie mogę uwierzyć po 4 aktualizacjach)

+0

Spójrz na to [Odpowiedź] (http://stackoverflow.com/questions/7504837/why-is-my-addition-of-2-shorts-causing-a-casting-compile-error-due- to-ints) – trebor

+0

[Powiązane] (http://stackoverflow.com/a/3080381/335858) – dasblinkenlight

+0

[Powiązane] (http://stackoverflow.com/questions/11853602/c-sharp-does-not-let- me-sum-two-shorts-to-a-short) – weston

Odpowiedz

3

Int to najmniejszy podpisany typ, dla którego zdefiniowano operatora +, więc próba użycia + przy krótkim wyniku powoduje taki błąd.

+0

Interesujące! Pełniejszą odpowiedź można znaleźć [tutaj] (http://stackoverflow.com/questions/4343624/integer-summing-blues-short-short-problem/4347752#4347752) – Gimly