Pourquoi Array.Length est-il un int et non un uint

Pourquoi Array.Length est-il un int, et non un uint. Cela me dérange (juste un peu), car une valeur de longueur ne peut jamais être négative.

Cela m'a également obligé à utiliser un int pour une propriété de longueur sur ma propre classe, car lorsque vous spécifiez une valeur int, cela doit être transtypé explicitement...

Donc, la question ultime est : est-il utile d'utiliser un int non signé (uint) ? Même Microsoft semble ne pas les utiliser.

请先 登录 后评论

2 réponses

Lasse Vågsæther Karlsen

Généralement, les valeurs entières sont signées, sauf si vous avez explicitement besoin d'une valeur non signée. C'est juste la façon dont ils sont utilisés. Je ne suis peut-être pas d'accord avec ce choix, mais c'est comme ça.

Pour le moment, avec les contraintes de mémoire typiques d'aujourd'hui, si votre tableau ou une structure de données similaire nécessite une longueur UInt32, vous devriez envisager d'autres structures de données.

Avec un tableau d'octets, Int32 vous donnera 2 Go de valeurs

请先 登录 后评论
Community

Je pense que cela pourrait aussi avoir à voir avec la simplification des choses à un niveau inférieur, puisque Array.Length sera bien sûr ajouté à un nombre négatif à un moment donné, si Array.Length n'était pas signé, et ajouté à un entier négatif ( complément à deux), il pourrait y avoir des résultats désordonnés.

请先 登录 后评论
  • 1 abonnés
  • 0 favoris,454 Feuilleter
  • doekman posée à 2023-03-27 16:20