В C# я должен использовать uint или int для значений, которые никогда не должны быть отрицательными?

Возможный дубликат:
Должен ли я использовать Uint в C# для значений, которые не могут быть отрицательными?

Предположим, что MaxValue из (примерно:)) 2^31 против 2^32 не имеет значения. С одной стороны, используя uint кажется хорошим, потому что это говорит само за себя, это указывает (и обещает?), что некоторая ценность никогда не может быть отрицательной. Тем не мение, int чаще, и бросок часто неудобен. Можно просто использовать int и всегда дополнять его контрактами на код (все уже перешли на.Net 4.0, верно?) Стандартные библиотеки используют int за Length а также Size свойства, даже если они никогда не должны быть отрицательными. Итак, для вас очевидно, что int лучше, чем uint большую часть времени, или это сложнее?

Пожалуйста, задавайте вопросы, если вы обнаружите, что этот вопрос четко не сформулирован.

Благодарю.

РЕДАКТИРОВАТЬ: Да, выглядит как дурак. Однако и очень маленький вопрос: не могли бы вы дать мне хороший пример того, как дополнить свойства / функции контрактами кода / утверждениями assert в этом конкретном случае, когда значение не может быть отрицательным?

2 ответа

Решение

Смотрите здесь для предыдущего ответа.

Краткий ответ - Нет. Вы можете реализовать, как показано ниже.

private int _length;
public int Length
{
    get { return _length; }
    set
    {
        if (value < 0)
        {
            throw new InvalidOperationException("Length must be always positive. Please make sure the value is positive value.");
        }
        this._length = value;
    }
}
Другие вопросы по тегам