Je me demande quelle est la "meilleure pratique" pour casser les longues chaînes de caractères dans le code source C#. Est-ce que cette chaîne
"string1"+
"string2"+
"string3"
concaténés lors de la compilation ou en cours d'exécution ?
Je me demande quelle est la "meilleure pratique" pour casser les longues chaînes de caractères dans le code source C#. Est-ce que cette chaîne
"string1"+
"string2"+
"string3"
concaténés lors de la compilation ou en cours d'exécution ?
C'est fait au moment de la compilation. C'est exactement l'équivalent de "string1string2string3".
Supposons que vous ayez :
string x = "string1string2string3"
string y = "string1" + "string2" + "string3"
Le compilateur effectuera l'internage approprié pour que x et y fassent référence aux mêmes objets.
EDIT : Il y a beaucoup de discussion sur StringBuilder
dans les réponses et les commentaires. De nombreux développeurs semblent croire que la concaténation de chaînes de caractères devrait toujours se faire avec StringBuilder
. C'est une généralisation excessive, mais il faut le comprendre. pourquoi StringBuilder
est bon dans certaines situations, et pas dans d'autres .
Si les espaces ne sont pas importants, vous pouvez utiliser le caractère d'échappement @ pour écrire des chaînes de caractères sur plusieurs lignes dans votre code. Ceci est utile si vous avez une requête dans votre code par exemple :
string query = @"SELECT whatever
FROM tableName
WHERE column = 1";
Cela vous donnera une chaîne de caractères avec des sauts de ligne et des tabulations, mais pour une requête, cela n'a pas d'importance.
Votre exemple sera concaténé au moment de la compilation. Toutes les chaînes en ligne et les variables const string sont concaténées au moment de la compilation.
Il faut garder à l'esprit que l'inclusion de toute chaîne en lecture seule retardera le concaténage au moment de l'exécution. string.Empty et Environment.NewLine sont toutes deux des variables de chaîne en lecture seule.
Cela dépend vraiment de ce dont vous avez besoin. En général, si vous avez besoin de concaténer des chaînes de caractères, les meilleures performances en temps d'exécution seront obtenues en utilisant StringBuilder. Si vous faites référence dans le code source à quelque chose comme var str = "String1"+"String2", il sera converti en string str = "String1String2" à la compilation. Dans ce cas, vous n'avez pas de surcharge de concaténation.
Votre généralisation est trop générale - si vous pouvez effectuer toute la concaténation en une seule fois, c'est généralement plus rapide (et plus lisible) que d'utiliser StringBuilder. Préférez donc "x + y + z" à new StringBuilder(x).Append(y).Append(z).ToString(). StringBuilder est utile lorsqu'il y a répétées concaténations.
Pour seconder la remarque de Jon... StringBuilder est utile pour les boucles, etc. Pour un seul ensemble d'opérations, string.Concat est plus simple et fonctionne de la même manière.
Merci Marc - je n'aurais plus de place :) J'ai modifié ma réponse pour pointer vers mon article sur StringBuilder...
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.