Определенно, я знаю основные различия между целыми числами без знака ( uint
) и целыми числами со знаком ( int
).
Я заметил, что в общедоступных классах .NET свойство с именем Length
всегда использует целые числа со знаком.
Возможно, это связано с тем, что целые числа без знака несовместимы с CLS.
Однако, например, в моей статической функции:
public static double GetDistributionDispersion(int tokens, int[] positions)
Параметр tokens
и все элементы в позициях
не могут быть отрицательными. Если он отрицательный, окончательный результат бесполезен.Поэтому, если я использую int
как для токенов
, так и позиций
, мне придется проверять значения каждый раз, когда эта функция вызывается (и возвращать бессмысленные значения или бросать исключения, если обнаружены отрицательные значения ???), что утомительно.
Хорошо, тогда мы должны использовать uint
для обоих параметров. Для меня это действительно имеет смысл.
Однако я обнаружил, что, как и во многих публичных API, они почти всегда используют int
. Означает ли это, что внутри их реализации они всегда проверяют отрицательность каждого значения (если оно должно быть неотрицательным)?
Итак, одним словом, что мне делать?
Я мог бы привести два случая:
Должны ли мы использовать разные схемы для этих двух случаев?
Питер
PS: Я провел много исследований, и все еще нет причин убеждать меня не использовать uint
: -)