Pourquoi les gens confondent-ils les chaînes avec les littéraux de chaîne? La réponse acceptée est une excellente réponse à une question différente; pas à celui-ci.
Je sais que c'est un vieux sujet, mais je suis venu ici avec peut-être la même question que le PO, et c'est frustrant de voir comment les gens continuent de le mal lire. Ou peut-être que je le lis mal, je ne sais pas.
En gros, une chaîne est une région de la mémoire de l'ordinateur qui, pendant l'exécution d'un programme, contient une séquence d'octets pouvant être mappée en caractères de texte. Un littéral de chaîne, d'autre part, est un morceau de code source, pas encore compilé, qui représente la valeur utilisée pour initialiser une chaîne ultérieurement, pendant l'exécution du programme dans lequel il apparaît.
En C #, la déclaration ...
string query = "SELECT foo, bar"
+ " FROM table"
+ " WHERE id = 42";
... ne produit pas une chaîne à trois lignes mais une doublure; la concaténation de trois chaînes (chacune initialisée à partir d'un littéral différent) dont aucune ne contient de modificateur de nouvelle ligne.
Ce que l'OP semble demander - du moins ce que je demanderais avec ces mots - n'est pas comment introduire, dans la chaîne compilée, des sauts de ligne qui imitent ceux trouvés dans le code source, mais comment rompre pour plus de clarté un long , une seule ligne de texte dans le code source sans introduire de rupture dans la chaîne compilée. Et sans nécessiter un temps d'exécution prolongé, vous avez passé à joindre les multiples sous-chaînes provenant du code source. Comme les barres obliques inverses de fin dans un littéral de chaîne multiligne en javascript ou C ++.
Le fait de suggérer l'utilisation de chaînes textuelles, de StringBuilder
s nevermind , de String.Join
s ou même de fonctions imbriquées avec des inversions de chaînes et autres, me fait penser que les gens ne comprennent pas vraiment la question. Ou peut-être que je ne le comprends pas.
Pour autant que je sache, C # n'a pas (du moins dans la version paléolithique que j'utilise encore, de la décennie précédente) pour produire proprement des littéraux de chaîne multilignes qui peuvent être résolus lors de la compilation plutôt que de l'exécution.
Peut-être que les versions actuelles le prennent en charge, mais je pensais partager la différence que je perçois entre les chaînes et les littéraux de chaîne.
MISE À JOUR:
(D'après le commentaire de MeowCat2012) Vous pouvez. L'approche "+" par OP est la meilleure. Selon les spécifications, l'optimisation est garantie: http://stackoverflow.com/a/288802/9399618