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