Ранее сегодня я пытался добавить два ushorts и заметил, что мне нужно использовать результат назад к ushort. Я думал, что это может быть uint (для предотвращения возможного непреднамеренного переполнения?), но, к моему удивлению, это был int (System.Int32).
Есть ли для этого какая-то умная причина, или это может быть потому, что int рассматривается как «базовый» целочисленный тип?
Пример:
ushort a = 1;
ushort b = 2;
ushort c = a + b; // <- "Cannot implicitly convert type 'int' to 'ushort'. An explicit conversion exists (are you missing a cast?)"
uint d = a + b; // <- "Cannot implicitly convert type 'int' to 'uint'. An explicit conversion exists (are you missing a cast?)"
int e = a + b; // <- Works!
Изменить:Как и в ответе GregS, спецификация C#говорит, что оба операнда (в этом примере 'a' и 'b')должны быть преобразованы в int. Меня интересует основная причина того, почему это является частью спецификации :, почему спецификация C#не позволяет выполнять операции непосредственно со значениями ushort?