Используйте uint или int

Определенно, я знаю основные различия между целыми числами без знака ( uint ) и целыми числами со знаком ( int ).

Я заметил, что в общедоступных классах .NET свойство с именем Length всегда использует целые числа со знаком.

Возможно, это связано с тем, что целые числа без знака несовместимы с CLS.

Однако, например, в моей статической функции:

public static double GetDistributionDispersion(int tokens, int[] positions)

Параметр tokens и все элементы в позициях не могут быть отрицательными. Если он отрицательный, окончательный результат бесполезен.Поэтому, если я использую int как для токенов , так и позиций , мне придется проверять значения каждый раз, когда эта функция вызывается (и возвращать бессмысленные значения или бросать исключения, если обнаружены отрицательные значения ???), что утомительно.

Хорошо, тогда мы должны использовать uint для обоих параметров. Для меня это действительно имеет смысл.

Однако я обнаружил, что, как и во многих публичных API, они почти всегда используют int . Означает ли это, что внутри их реализации они всегда проверяют отрицательность каждого значения (если оно должно быть неотрицательным)?

Итак, одним словом, что мне делать?

Я мог бы привести два случая:

  1. Эта функция будет вызываться только мной в моем собственном решении;
  2. Эта функция будет использоваться как библиотека другими в другой команде.

Должны ли мы использовать разные схемы для этих двух случаев?

Питер

PS: Я провел много исследований, и все еще нет причин убеждать меня не использовать uint : -)

10
задан jason 26 September 2011 в 07:03
поделиться