41 votes

Meilleure façon de casser les longues chaînes de caractères dans le code source C#

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 ?

56voto

Jon Skeet Points 692016

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 .

45voto

Rune Grimstad Points 17775

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.

8voto

James Newton-King Points 13880

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.

4voto

Maxam Points 2682

La concaténation est effectuée au moment de la compilation, de sorte qu'il n'y a pas de surcharge au moment de l'exécution.

1voto

Tamir Points 1314

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.

0 votes

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.

0 votes

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.

0 votes

Merci Marc - je n'aurais plus de place :) J'ai modifié ma réponse pour pointer vers mon article sur StringBuilder...

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