2010-06-03 5 views
0

Можно создать дубликат:
Should I use uint in C# for values that can’t be negative?В C# следует использовать uint или int для значений, которые никогда не должны быть отрицательными?

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

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

Спасибо.

EDIT: Yup, выглядит как обман. Тем не менее, и лишний вопрос: не могли бы вы дать мне хороший пример того, как дополнить свойства/функции предложениями кодовых контрактов/утверждений в этом конкретном случае, когда значение не может быть отрицательным?

ответ

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; 
    } 
}