Doublons Possibles:
Pourquoi ne .NET use int au lieu de uint dans certaines classes?
Pourquoi est-Array.La longueur d'un int et non un uintSalut,
Je me demande toujours pourquoi le Comte n'est pas un entier non signé, au lieu d'une signé une?
Par exemple, prendre la ListView.SelectedItems.Le comte. Le nombre d'éléments ne peut pas être inférieure à 0, alors pourquoi est-il signé un int?
Si j'essaie de tester si il y a des éléments sélectionnés, j'aimerais bien tester
if (ListView.SelectedItems.Count == 0) {}
mais parce que c'est un entier signé, je dois tester
if (ListView.SelectedItems.Count <= 0) {}
ou est-il en tout cas, si .Le comte pourrait être < 0 ?
Réponses
Trop de publicités?Un entier non signé n'est pas conforme à CLS ( Common Language Specification )
Pour plus d'informations sur le code conforme CLS, voir ce lien:
Mabye, car le type de données uint ne fait pas partie de la spécification de langage commun (CLS), car tous les langages .Net ne le prennent pas en charge.
Voici un fil très similaire sur les tableaux:
http://stackoverflow.com/questions/6301/why-is-arar-length-an-int-and-not-an-uint
Regardons ce à partir d'un angle pratique.
Pour le meilleur ou pour la peine, brûlé ints sont les normales de tri de services de renseignements sur l'utilisation sur .net, il est également normal d'utiliser roussi ints en C et C++. Donc, la plupart des variables sont déclarées en "int" plutôt que "unsigned int" sauf s'il y a une bonne raison sinon.
La conversion entre un unsigned int et signé de l'int a des problèmes et n'est pas toujours sûr.
Sur un système 32 bits, il n'est pas possible pour une collection à n'importe où près de 2^^32 éléments, donc signé un int est assez grand, dans tous les cas.
Sur un système 64 bits, anunsigned int ne gagne pas beaucoup, dans la plupart des cas, une roussi int est toujours assez grand, sinon vous devez utiliser une version 64 bits de type int. (J'espère qu'aucun de la collection standard va bien se débrouiller avec n'importe où près de 2^^31 articles sur un système 64!)
Donc, étant donné que l'utilisation d'un unsigned int n'a pas d'avantage évident, alors pourquoi voudriez-vous utiliser un unsigned int?
Il n'est pas conforme CLS, en grande partie pour permettre un soutien plus large de langues différentes.
Signé int offre une facilité de portage de code en C ou C++ qui utilise l'arithmétique des pointeurs.
Le comte peut être une partie d'une expression où l'ensemble de la valeur peut être négative. En particulier, le comte a une relation directe avec les indices, où valide les indices sont toujours dans la gamme [0, Count - 1], mais les résultats négatifs sont utilisés par certains binaire méthodes de recherche (y compris ceux fournis par la BCL) afin de refléter la position où un nouvel élément doit être inséré à maintenir l'ordre.
Dans vb.net, la construction de boucle (un "For/Next boucle") exécute la boucle avec des valeurs jusqu'à et y compris la valeur maximale spécifiée, à la différence de C qui peut facilement faire une boucle avec des valeurs inférieures à la limite supérieure. Ainsi, il est souvent nécessaire de spécifier une boucle comme par exemple "Pour I=0 À la Matrice.Longueur-1"; si le Tableau.Longueur ont été signés et les et les zéro, ce qui pourrait causer un problème évident. Même en C, l'un des avantages d'être en mesure de dire "for (i=Array.Length-1; i GE 0; --i)". Parfois, je pense qu'il serait utile de disposer d'un 31 bits type integer qui serait en charge de l'élargissement jette à la fois signé et unsigned int, mais je n'ai jamais entendu parler d'une langue à soutenir de telles.