Меня удивляет поведение компилятора С# в следующем примере:
int i = 1024;
uint x = 2048;
x = x+i; // A error CS0266: Cannot implicitly convert type 'long' to 'uint' ...
Кажется ОК, поскольку int + uint
может переполняться. Однако, если uint
изменено на int
, тогда ошибка исчезает, например int + int
не может выдавать переполнение:
int i = 1024;
int x = 2048;
x = x+i; // OK, int
Кроме того, uint + uint = uint
:
uint i = 1024;
uint x = 2048;
x = x+i; // OK, uint
Кажется совершенно неясным.
Почему int + int = int
и uint + uint = uint
, но int + uint = long
?
Какова мотивация этого решения?