Почему ushort + ushort равно int?

Ранее сегодня я пытался добавить два 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?

28
задан Backwards_Dave 19 December 2018 в 05:05
поделиться