63 votes

Pourquoi .NET utilise-t-il int au lieu de uint dans certaines classes?

Je rencontre toujours du code qui utilise int pour des choses comme .Count , etc., même dans les classes du framework, au lieu de uint.

Quelle en est la raison?

74voto

dtb Points 104373

UInt32 n'est pas conforme à la norme CLS ; il est donc possible qu'il ne soit pas disponible dans toutes les langues qui ciblent la spécification de langue commune. Int32 est conforme à CLS et son existence est donc garantie dans toutes les langues.

8voto

Adam Davis Points 47683

int, dans c, est spécifiquement défini comme étant le type entier par défaut du processeur et est donc considéré comme le plus rapide pour les opérations numériques générales.

3voto

Dunk Points 1368

Si le nombre est vraiment non signé par sa nature intrinsèque, alors je voudrais déclarer un unsigned int. Cependant, si je viens de passer à l'aide d'un certain nombre (pour le moment) dans la plage positive alors je dirais que c'est un int. Les raisons principales étant que:

  • Il évite d'avoir à faire beaucoup de conversion de type, comme la plupart des méthodes/fonctions sont écrites à prendre un int et pas un unsigned int.
  • Il élimine les éventuels avertissements de troncation.
  • Vous, au final, souhaitant vous pouvez attribuer une valeur négative pour le nombre que vous aviez à l'origine de la pensée serait toujours positif.

Sont quelques réflexions qui me sont venues à l'esprit.

J'ai utilisé pour tenter et être très prudent et choisir le bon/signés signé et j'ai finalement réalisé qu'il n'a pas vraiment d'entraîner un avantage positif. Il crée une surcharge de travail. Alors, pourquoi faire les choses à fond par le mélange et l'appariement.

2voto

Botz3000 Points 23640

Une autre raison d'utiliser int:

Supposons que vous ayez une boucle identique à celle-ci:

 for (i = 0; i <= someList.Count - 1; i++) {
  // Stuff
}
 

(bien que vous ne devriez probablement pas le faire de cette façon)

évidemment, si someList.Count valait 0 et n'était pas signé, vous auriez un problème.

2voto

Mark Knudson Points 21

UInt32 n'est pas conforme à CLS. http://msdn.microsoft.com/en-us/library/system.uint32.aspx

Je pense qu'au fil des ans, les gens sont arrivés à la conclusion que l'utilisation de types non signés n'apportait pas vraiment d'avantages. La meilleure question est: que gagneriez-vous en faisant de Compter un UInt32?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X