In another thread, someone asked about why adding two ushort
values raised errors in C#. e.g.
ushort x = 4;
ushort y = 23;
ushort z = x+y; // E
It's because the %
operator is not defined for integer types smaller than int
. The C#
spec lists all overloads defined for the modulo operator on integer types:
int operator %(int x, int y);
uint operator %(uint x, uint y);
long operator %(long x, long y);
ulong operator %(ulong x, ulong y);
https://github.com/dotnet/csharplang/blob/master/spec/expressions.md#remainder-operator
Using %
on ushorts then defaults to the first overload from the list above, which returns an int
that can't be cast to ushort
implicitly.
If you ask why it's not defined, you probably would have to ask the creators of the C# specification.