Я некоторое время наблюдал, что программисты на С# обычно используют int везде и редко прибегают к uint. Но я никогда не обнаружил удовлетворительного ответа на вопрос о том, почему.
Если интероперабельность - это ваша цель, uint не должен появляться в общедоступных API, потому что не все языки CLI поддерживают целые числа без знака. Но это не объясняет, почему int настолько распространен, даже во внутренних классах. Я подозреваю, что это причина, по которой uint используется экономно в BCL.
В С++, если у вас есть целое число, для которого отрицательные значения не имеют смысла, вы выбираете целое число без знака.
Это явно означает, что отрицательные числа не допускаются или ожидаются, и компилятор проведет вас для проверки. Я также подозреваю в случае индексов массива, что JIT может легко отбросить проверку нижних границ.
Однако, при смешивании типов int и unit, потребуется дополнительная осторожность и отливки.
Следует ли использовать uint больше? Почему?