2010-06-03 15 views
0

Possible en double:
Should I use uint in C# for values that can’t be negative?En C# devrais-je utiliser uint ou int pour des valeurs qui ne sont jamais censées être négatives?

Supposons que le MaxValue de (à peu près :)) 2^31 vs 2^32 n'a pas d'importance. D'une part, l'utilisation de uint semble bien parce qu'elle est explicite, elle indique (et promet?) Qu'une certaine valeur ne peut jamais être négative. Cependant, int est plus commun, et une distribution est souvent incommode. On peut juste utiliser int et toujours le compléter avec des contrats de code (tout le monde a changé pour .Net 4.0 maintenant, non?). Les bibliothèques standard utilisent int pour les propriétés Length et Size, même si celles-ci ne devraient jamais être négatives. Donc, est-il évident pour vous que int est mieux que uint la plupart du temps, ou est-ce plus compliqué?

Veuillez poser des questions si vous trouvez que cette question n'est pas clairement indiquée.

Merci.

EDIT: Yup, ressemble à une dupe. Cependant, et une toute petite question: pourriez-vous me donner un bon exemple de comment compléter les propriétés/fonctions avec des contrats de code/assert déclarations dans ce cas particulier lorsque la valeur ne peut être négative?

Répondre

2

La réponse courte est Non. Vous voudrez peut-être implémenter comme ci-dessous.

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