There is a predefined implicit conversion from short to int, long, float, double, or decimal.
You cannot implicitly convert nonliteral numeric types of larger storage size to short (see Integral Types Table (C# Reference) for the storage sizes of integral types). Consider, for example, the following two short variables x and y:
The following assignment statement will produce a compilation error, because the arithmetic expression on the right-hand side of the assignment operator evaluates to int by default.
short z = x + y; // Error: no conversion from int to short
To fix this problem, use a cast:
short z = (short)(x + y); // OK: explicit conversion
It is possible though to use the following statements, where the destination variable has the same storage size or a larger storage size:
int m = x + y;
long n = x + y;
There is no implicit conversion from floating-point types to short. For example, the following statement generates a compiler error unless an explicit cast is used:
short x = 3.0; // Error: no implicit conversion from double
short y = (short)3.0; // OK: explicit conversion
For information on arithmetic expressions with mixed floating-point types and integral types, see float and double.
For more information on implicit numeric conversion rules, see the Implicit Numeric Conversions Table (C# Reference).