Question

La plupart du temps nous représentent des concepts qui ne peut jamais être inférieur à 0.Par exemple, pour déclarer la longueur, nous écrire:

int length;

Le nom exprime à son objectif, mais vous pouvez affecter des valeurs négatives pour elle.Il semble que dans certains cas, vous pouvez représenter votre intention plus clairement par écrit de cette façon au lieu de cela:

uint length; 

Certains inconvénients que je peux penser:

  • unsigned types (uint, ulong, ushort) ne sont pas CLS conforme de sorte que vous ne pouvez pas l'utiliser avec d'autres langues qui ne supportent pas cette
  • .Net classes utilisent des types signés la plupart du temps de sorte que vous avez à jeter

Pensées?

Était-ce utile?

La solution

“A Rome, fais comme les Romains.”

Alors qu'il est théoriquement un avantage en utilisant des valeurs non signées le cas échéant, car il rend le code plus expressif, ce n'est tout simplement pas fait en C#.Je ne sais pas pourquoi les développeurs d'abord n'ai pas de conception des interfaces à gérer uints et faire le type CLS conformes, mais maintenant, le train a quitté la gare.

Depuis la cohérence est généralement important, je vous conseille de prendre le C# de la route et à l'aide de ints.

Autres conseils

Si vous décrémentation signé nombre avec une valeur de 0, il devient négatif et vous pouvez facilement test pour cela.Si vous décrémenter un nombre non signé avec une valeur de 0, il underflows et devient la valeur maximale pour le type un peu plus difficile à vérifier.

Votre deuxième point est le plus important.En général, vous devriez utiliser int depuis c'est une assez bonne "fourre-tout" pour les valeurs entières.Je tiens seulement à utiliser uint si vous avez absolument besoin de la capacité de compter plus élevé que int, mais sans l'aide de la mémoire supplémentaire long l'exige (ce n'est pas beaucoup plus de mémoire, afin de ne pas être pas cher :-p).

Je pense que l'utilisation subtile de la uint vsint va causer de la confusion avec les développeurs, sauf s'il a été écrit dans le guide du développeur pour la société.

Si la longueur, par exemple, ne peut pas être inférieur à zéro alors il devrait être exprimée clairement dans la logique d'entreprise afin de futurs développeurs peuvent lire le code et de savoir la vraie intention.

Juste mes 2 cents.

Je ferai remarquer que, en C#, vous pouvez activer /checked de vérifier pour dépassement de capacité arithmétique / dépassement de capacité, ce qui n'est pas une mauvaise idée de toute façon.Si la performance est importante dans une section critique, vous pouvez toujours utiliser unchecked afin d'éviter cela.

Pour le code interne (c'est à dire un code qui ne sera pas référencé dans toute l'interopérabilité manoir avec d'autres langues), je vote pour à l'aide de unsigned lorsque la situation le justifie, comme length des variables comme mentionné plus haut.Ce - avec vérifiés de calcul fournit une plus net pour les développeurs, la capture de bogues plus tôt.

Un autre point dans l'signé / non signé débat, c'est que certains programmeurs utilisent des valeurs telles que -1 pour indiquer les erreurs, quand ils n'auraient pas de sens.Je souscris à l'idée que chaque variable doit avoir un seul but, mais si vous - ou vos collègues de code avec - comme pour indiquer des erreurs de cette façon, en laissant les variables signé vous donne la flexibilité d'ajouter des états d'erreur plus tard.

Vos deux points sont bons.La principale raison de l'éviter est de la coulée, cependant.Casting rend incroyablement ennuyeux à utiliser.J'ai essayé d'utiliser unisigned variables une fois, mais j'ai eu à saupoudrer jette absolument partout, parce que le cadre des méthodes utilisent tous des entiers signés.Par conséquent, chaque fois que vous appelez une méthode du cadre, vous avez à jeter.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top