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

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

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

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

Спасибо.

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


person Hamish Grubijan    schedule 03.06.2010    source источник


Ответы (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;
    }
}
person Soe Moe    schedule 03.06.2010