Ранее сегодня я пытался добавить два 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, в спецификации С# говорится, что оба операнда (в этом примере "a" и "b") должны быть преобразованы в int. Меня интересует основная причина, по которой это является частью спецификации: почему спецификация С# не допускает операций непосредственно над значениями ushort?