Partager via


Comment 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 des 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 au moment de l’exécution ne se produit. Pour les variables de chaîne, la concaténation se produit uniquement au moment de l’exécution.

Remarque

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 l’exécuter en sélectionnant Réexécuter. Le 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 découpe une longue chaîne littérale 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 une longue chaîne littérale. 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);

+ et += les opérateurs

Pour concaténer des variables de chaîne, vous pouvez utiliser les opérateurs + ou +=, d’interpolation de chaîne ou les méthodes String.Format, String.Concat, String.Join ou StringBuilder.Append. L’opérateur + est facile à utiliser et permet un code intuitif. Même si vous utilisez plusieurs opérateurs + dans une instruction, le contenu de la chaîne n’est copié qu’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îne, 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);

Remarque

Dans les opérations de concaténation de chaîne, le compilateur C# traite une chaîne Null identique à une chaîne vide.

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 pour 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 où vous ne savez pas combien de chaînes sources vous combinez, et le nombre réel de chaînes sources peut être volumineux. 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 des chaînes à partir d’une collection consiste à utiliser String.Concat méthode. Utilisez String.Join méthode si un délimiteur doit séparer les chaînes sources. Le code suivant combine un tableau de mots à l’aide des 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 des chaînes à partir d’une collection. Cette méthode combine les chaînes sources à l’aide d’une expression lambda. L’expression lambda effectue le travail pour 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 entraîner 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