Guide pratique pour concaténer plusieurs chaînes (Guide C#)

La concaténation consiste à ajouter une chaîne à la fin d’une autre chaîne. Vous concaténez les chaînes à l’aide de l’opérateur +. Pour les littéraux de chaîne et les constantes de chaîne, la concaténation se produit au moment de la compilation ; aucune concaténation ne se produit au moment de l’exécution. Pour les variables de chaîne, la concaténation se produit uniquement au moment de l’exécution.

Notes

Les exemples C# de cet article s’exécutent dans l’exécuteur et le terrain de jeu du code inline Try.NET. Sélectionnez le bouton Exécuter pour exécuter un exemple dans une fenêtre interactive. Une fois que vous avez exécuté le code, vous pouvez le modifier et exécuter le code modifié en resélectionnant Exécuter. La code modifié s’exécute dans la fenêtre interactive ou, si la compilation échoue, la fenêtre interactive affiche tous les messages d’erreur du compilateur C#.

Littéraux de chaîne

L’exemple suivant fractionne un littéral de chaîne long en chaînes plus petites pour améliorer la lisibilité dans le code source. Le code concatène les chaînes plus petites pour créer le littéral de chaîne long. Les parties sont concaténées en une seule chaîne au moment de la compilation. Il n’y a aucune incidence sur les performances d’exécution, quel que soit le nombre de chaînes impliquées.

// Concatenation of literals is performed at compile time, not run time.
string text = "Historically, the world of data and the world of objects " +
"have not been well integrated. Programmers work in C# or Visual Basic " +
"and also in SQL or XQuery. On the one side are concepts such as classes, " +
"objects, fields, inheritance, and .NET Framework APIs. On the other side " +
"are tables, columns, rows, nodes, and separate languages for dealing with " +
"them. Data types often require translation between the two worlds; there are " +
"different standard functions. Because the object world has no notion of query, a " +
"query can only be represented as a string without compile-time type checking or " +
"IntelliSense support in the IDE. Transferring data from SQL tables or XML trees to " +
"objects in memory is often tedious and error-prone.";

System.Console.WriteLine(text);

Opérateurs + et +=

Pour concaténer des variables de chaîne, vous pouvez utiliser les opérateurs + ou +=, l’interpolation de chaînes, ou encore les méthodes String.Format, String.Concat, String.Join ou StringBuilder.Append. L’opérateur + est facile à utiliser et convient au code intuitif. Même si vous utilisez plusieurs opérateurs + dans une instruction, le contenu de la chaîne est copié une seule fois. Le code suivant montre des exemples d’utilisation des opérateurs + et += pour concaténer des chaînes :

string userName = "<Type your name here>";
string dateString = DateTime.Today.ToShortDateString();

// Use the + and += operators for one-time concatenations.
string str = "Hello " + userName + ". Today is " + dateString + ".";
System.Console.WriteLine(str);

str += " How are you today?";
System.Console.WriteLine(str);

Interpolation de chaîne

Dans certaines expressions, il est plus facile de concaténer des chaînes à l’aide de l’interpolation de chaînes, comme le montre le code suivant :

string userName = "<Type your name here>";
string date = DateTime.Today.ToShortDateString();

// Use string interpolation to concatenate strings.
string str = $"Hello {userName}. Today is {date}.";
System.Console.WriteLine(str);

str = $"{str} How are you today?";
System.Console.WriteLine(str);

Notes

Dans les opérations de concaténation de chaîne, le compilateur C# traite une chaîne null de la même manière qu’une chaîne vide.

À partir de C# 10, vous pouvez utiliser l’interpolation de chaîne pour initialiser une chaîne constante lorsque toutes les expressions utilisées pour les espaces réservés sont également des chaînes constantes.

String.Format

Une autre méthode permettant de concaténer des chaînes est String.Format. Cette méthode fonctionne bien lorsque vous créez une chaîne à partir d’un petit nombre de chaînes de composants.

StringBuilder

Dans d’autres cas, vous pouvez combiner des chaînes dans une boucle quand vous ne connaissez pas le nombre de chaînes sources que vous combinez et que le nombre réel de chaînes sources peut se révéler très grand. La classe StringBuilder a été conçue pour ces scénarios. Le code suivant utilise la méthode Append de la classe StringBuilder pour concaténer des chaînes.

// Use StringBuilder for concatenation in tight loops.
var sb = new System.Text.StringBuilder();
for (int i = 0; i < 20; i++)
{
    sb.AppendLine(i.ToString());
}
System.Console.WriteLine(sb.ToString());

Vous pouvez en savoir plus sur les raisons de choisir la concaténation de chaînes ou la classe StringBuilder.

String.Concat ou String.Join

Une autre option permettant de joindre les chaînes d’une collection consiste à utiliser la méthode String.Concat. Utilisez la méthode String.Join si un séparateur doit séparer des chaînes sources. Le code suivant combine un tableau de mots en utilisant ces deux méthodes :

string[] words = { "The", "quick", "brown", "fox", "jumps", "over", "the", "lazy", "dog." };

var unreadablePhrase = string.Concat(words);
System.Console.WriteLine(unreadablePhrase);

var readablePhrase = string.Join(" ", words);
System.Console.WriteLine(readablePhrase);

LINQ et Enumerable.Aggregate

Enfin, vous pouvez utiliser LINQ et la méthode Enumerable.Aggregate pour joindre les chaînes d’une collection. Cette méthode combine les chaînes sources en utilisant une expression lambda. L’expression lambda effectue le travail d’ajouter chaque chaîne à l’accumulation existante. L’exemple suivant combine un tableau de mots, en ajoutant un espace entre chaque mot du tableau :

string[] words = { "The", "quick", "brown", "fox", "jumps", "over", "the", "lazy", "dog." };

var phrase = words.Aggregate((partialPhrase, word) =>$"{partialPhrase} {word}");
System.Console.WriteLine(phrase);

Cette option peut créer plus d’allocations que d’autres méthodes pour concaténer des collections, car elle crée une chaîne intermédiaire pour chaque itération. Si l’optimisation des performances est essentielle, considérez la classe StringBuilder ou la méthode String.Concat ou String.Join pour concaténer une collection, au lieu de Enumerable.Aggregate.

Voir aussi