82 votes

Pourquoi existe-t-il des versions minuscules et majuscules des chaînes de caractères et laquelle dois-je utiliser ?

Bon, c'est peut-être une question stupide, mais je n'ai pas réussi à trouver d'informations à ce sujet.

String.Empty et string.Empty sont-ils identiques ? Je me retrouve toujours à graviter vers l'utilisation de la version majuscule (String.Empty) parce que je préfère la couleur et l'aspect de celle-ci dans mon IDE que la version minuscule (string.Empty)...

Y a-t-il une façon "correcte" d'utiliser ces deux produits ou est-ce une question de préférence personnelle ? J'ai supposé que les deux étaient identiques, mais pour être honnête, je n'y ai jamais réfléchi jusqu'à ce que, pour une raison ou une autre, je me demande aujourd'hui "Si les deux existent, ils doivent exister pour une raison".

Est Y a-t-il une raison que quelqu'un connaisse ? Si oui, quelle est-elle ? Quelqu'un peut-il m'éclairer ?

P.S. Les "copies exactes" ne répondent qu'à la moitié de la question - "laquelle est la bonne ?", et non à la question "pourquoi les deux existent-elles ?".


Duplicata exact : http://stackoverflow.com/questions/7074/in-c-what-is-the-difference-between-string-and-string

Duplicata exact : http://stackoverflow.com/questions/215255/string-vs-string-in-c

54voto

Konrad Rudolph Points 231505

En C#, les noms de types en minuscules sont des alias pour l'option System.xxx les noms de type, par exemple string est égal à System.String y int est égal à System.Int32 .

La meilleure pratique consiste à utiliser ces alias de langage pour les noms de type au lieu de leur équivalent dans le framework, par souci de cohérence. Vous vous y prenez donc mal ;-)

Quant à la raison pour laquelle ils existent tous les deux, les types .NET existent parce qu'ils sont définis dans une norme indépendante du langage pour les bibliothèques .NET appelée CTS (common type system). Je ne comprends pas pourquoi C# définit ces alias (VB fait quelque chose d'assez similaire). Je suppose que les deux raisons sont

  1. Une habitude. Incitez tous ces programmeurs C et Java à utiliser C# en fournissant les mêmes noms de types pour certains types fondamentaux.
  2. La paresse : Vous n'avez pas besoin d'importer le System pour les utiliser.

EDIT Puisque de nombreuses personnes semblent préférer l'autre notation, permettez-moi de souligner que cela n'est en aucun cas déraisonnable. On peut en fait défendre l'utilisation des noms de types CTS plutôt que les mots-clés de C# et certains arguments superficiellement bons sont proposés dans les autres réponses. D'un point de vue pureté/style, je serais probablement d'accord.

Toutefois, il faut se demander si cela vaut la peine de rompre une convention bien établie qui permet d'unifier le code entre les projets.

15voto

Ed S. Points 70246

C'est conceptuellement similaire à quelque chose comme ceci :

using int=System.Int32

6voto

Frederik Gheysels Points 36354

String est mappé à la classe String AFAIK, ils sont donc identiques.

Il en va de même pour, par exemple, int et Int32.

4voto

Arjan Einbu Points 7941

Ils sont tous les deux identiques.

Personnellement, je préfère utiliser la chaîne minuscule, la "bleue", en utilisant le mot clé C# au lieu du nom de la classe .NET pour la même raison que j'utilise int au lieu de Int32. De plus, la chaîne en minuscules ne nécessite pas l'inclusion de l'espace de noms System...

4voto

Shalmanese Points 2518

Personnellement, je préfère utiliser String car String et Object sont des références alors que tous les autres types de base sont des types de valeurs. Dans mon esprit, c'est la séparation la plus claire.

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