If i have some code like the following:
short myShortA = 54;
short myShortB = 12;
short myShortC = (short)(myShortA - myShortB);
Both operands are shorts and it's going into a short so why do i have to cast it?
If i have some code like the following:
short myShortA = 54;
short myShortB = 12;
short myShortC = (short)(myShortA - myShortB);
Both operands are shorts and it's going into a short so why do i have to cast it?
Because there's no "short - short" operator. Both operands are promoted to int.
From section 7.7.5 of the C# 3 spec:
The predefined subtraction operators are listed below. The operators all subtract y from x.
Integer subtraction:
int operator –(int x, int y); uint operator –(uint x, uint y); long operator –(long x, long y); ulong operator –(ulong x, ulong y);
In a checked context, if the difference is outside the range of the result type, a System.OverflowException is thrown.
(And then there's floating point subtraction.)
To make things a little bit easier, you could simply write an extension method like this:
public static class NumericExtensions
{
public static short Subtract(this short target, short value)
{
return (short)(target - value);
}
}
Others have answered your question... :)