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