Utiliser l’interpolation de chaîne pour construire des chaînes mises en forme
Ce tutoriel explique comment utiliser l’interpolation de chaîne pour insérer des valeurs dans une chaîne unique. Vous allez également apprendre à contrôler la mise en forme du texte de la chaîne de résultat. En utilisant votre navigateur pour écrire et exécuter du code C#, vous voyez instantanément les résultats.
Créer une chaîne interpolée
Exécutez le code suivant dans la fenêtre interactive. Sélectionnez le bouton Entrer en mode focus. Puis, tapez le bloc de code suivant dans la fenêtre interactive (remplacez <name>
par votre nom) et sélectionnez Exécuter :
var name = "<name>";
Console.WriteLine($"Hello, {name}. It's a pleasure to meet you!");
Quand vous exécutez le code, la fenêtre Sortie affiche une chaîne qui inclut votre nom dans le message d’accueil. L’argument de chaîne dans l’appel de la méthode WriteLine est une expression de chaîne interpolée. C’est un genre de modèle qui vous permet de construire une chaîne unique (appelée chaîne de résultat) à partir d’une chaîne qui comprend du code incorporé. Les expressions de chaînes interpolées sont particulièrement utiles pour insérer des valeurs dans une chaîne ou pour concaténer (joindre) plusieurs chaînes.
L’exemple ci-dessus contient les deux éléments que chaque expression de chaîne interpolée doit avoir :
Un littéral de chaîne qui commence par le caractère
$
avant ses guillemets ouvrants. Il ne peut pas y avoir d’espace entre le symbole$
et les guillemets. (Si vous voulez voir ce qui se passe si vous en incluez un, insérez un espace après le caractère$
dans la fenêtre interactive et exécutez le code modifié. Le compilateur C# affiche un message d’erreur « Caractère inattendu $ ».)Une ou plusieurs expressions d’interpolation. Une expression d’interpolation est indiquée par des accolades ouvrantes et fermantes (
{
et}
). Vous pouvez placer n’importe quelle expression C# qui retourne une valeur (notammentnull
) à l’intérieur des accolades.
Essayons quelques autres exemples d’interpolation de chaîne avec d’autres types de données.
Inclure différents types de données
À l’étape précédente, vous avez utilisé l’interpolation de chaîne pour insérer une chaîne à l’intérieur d’une autre. Chaque expression d’interpolation qui fait partie d’une expression de chaîne interpolée peut être cependant de n’importe quel type de données. Nous allons insérer des valeurs de différentes expressions de types de données dans une chaîne interpolée.
Dans l’exemple suivant, nous définissons d’abord un tuple qui a Name
, Price
et perPackage
membres. Exécutez le code suivant dans la fenêtre interactive :
var item = (Name: "eggplant", Price: 1.99m, perPackage: 3);
var date = DateTime.Now;
Console.WriteLine($"On {date}, the price of {item.Name} was {item.Price} per {item.perPackage} items.");
Notez que l’expression d’interpolation item.Price
dans la chaîne interpolée correspond au texte « 1,99 » dans la chaîne de résultat. En effet, lorsque le résultat de l’expression n’est pas de type chaîne, il est résolu en une chaîne de la façon suivante :
Si l’expression d’interpolation donne une valeur
null
, une chaîne vide («» ou String.Empty) est utilisée.Si l’expression d’interpolation ne donne pas une valeur
null
, en général, la méthodeToString
de l’expression du résultat est appelée.
Dans la sortie de cet exemple, la date est trop précise (le prix des aubergines ne change pas chaque seconde) et la valeur du prix n’indique pas la devise locale. À l’étape suivante, vous découvrirez comment résoudre ces problèmes en contrôlant le format des représentations sous forme de chaînes des résultats des expressions.
Contrôler la mise en forme des expressions d’interpolation
À l’étape précédente, deux chaînes à la mise en forme incorrecte ont été insérées dans la chaîne de résultat. L’une était une valeur de date et d’heure pour laquelle seule la date était appropriée. La deuxième était un prix qui n’indiquait pas la devise locale. Ces deux problèmes sont faciles à résoudre. En utilisant l’interpolation de chaîne, vous pouvez spécifier des chaînes de format qui contrôlent la mise en forme de types particuliers. Modifiez l’appel à Console.WriteLine
de l’exemple précédent de façon à inclure les chaînes de format pour les expressions de date et de prix, comme indiqué dans la ligne de code suivante :
Console.WriteLine($"On {date:d}, the price of {item.Name} was {item.Price:C2} per {item.perPackage} items");
Vous spécifiez une chaîne de format en plaçant après l’expression d’interpolation un signe deux-points (« : ») et la chaîne de format. « d » est une chaîne de format de date et d’heure standard qui représente le format de date courte. « C2 » est une chaîne de format numérique standard qui représente un nombre sous forme de valeur monétaire avec deux chiffres après la virgule.
Plusieurs types dans les bibliothèques .NET prennent en charge un ensemble prédéfini de chaînes de format. Il s’agit notamment de tous les types numériques et des types de date et d’heure. Pour obtenir une liste complète des types qui prennent en charge les chaînes de format, consultez Chaînes de format et types de bibliothèque de classes .NET dans l’article Mise en forme des types dans .NET.
Essayez de modifier les chaînes de format dans l’exemple pour voir comment elles impactent la mise en forme de la date et de l’heure ainsi que la valeur numérique. Remplacez le « d » dans {date:d}
par « t » (pour afficher le format d’heure courte), « y » (pour afficher l’année et mois) et « yyyy » (pour afficher l’année sous forme de nombre à quatre chiffres). Remplacez le « C2 » dans {price:C2}
par « e » (pour la notation exponentielle) et « F3 » (pour une valeur numérique avec trois chiffres après la virgule).
En plus de contrôler la mise en forme, vous pouvez contrôler la largeur de champ et l’alignement des chaînes mises en forme qui sont incluses dans la chaîne de résultat. À l’étape suivante, vous allez découvrir comment effectuer cette opération.
Contrôler la largeur de champ et l’alignement des expressions d’interpolation
En règle générale, quand le résultat d’une expression de chaîne interpolée est représenté sous forme de chaîne, la chaîne est incluse dans une chaîne de résultat sans espaces de début ou de fin. Contrôler la largeur d’un champ et l’alignement du texte vous permet de rendre une sortie plus lisible, en particulier quand vous utilisez un jeu de données. Pour observer cela, exécutez le code suivant :
var inventory = new Dictionary<string, int>()
{
["hammer, ball pein"] = 18,
["hammer, cross pein"] = 5,
["screwdriver, Phillips #2"] = 14
};
Console.WriteLine($"Inventory on {DateTime.Now:d}");
Console.WriteLine(" ");
Console.WriteLine($"|{"Item",-25}|{"Quantity",10}|");
foreach (var item in inventory)
Console.WriteLine($"|{item.Key,-25}|{item.Value,10}|");
Les noms des éléments sont alignés à gauche, tandis que leurs quantités sont alignées à droite. Vous spécifiez l’alignement en ajoutant une virgule (« , ») après une expression d’interpolation et en spécifiant la largeur de champ minimum. Si la valeur spécifiée est un nombre positif, le champ est aligné à droite. Si c’est un nombre négatif, le champ est aligné à gauche.
Essayez de supprimer les signes négatifs du code {"Item",-25}
et {item.Key,-25}
, puis réexécutez l’exemple. Cette fois, les noms d’élément sont alignés à droite.
Vous pouvez combiner un spécificateur d’alignement et une chaîne de format pour une même expression d’interpolation. Pour cela, spécifiez d’abord l’alignement, puis un signe deux-points et la chaîne de format. Essayez d’exécuter le code suivant qui affiche trois chaînes mises en forme avec des largeurs de champs définies :
Console.WriteLine($"[{DateTime.Now,-20:d}] Hour [{DateTime.Now,-10:HH}] [{1063.342,15:N2}] feet");
Félicitations !
Vous avez terminé le tutoriel interactif sur l’interpolation de chaînes. Vous pouvez consulter le site .NET pour télécharger le kit SDK .NET Core, créer un projet sur votre ordinateur et continuer à coder.
Pour plus d’informations, voir Interpolation de chaînes.
Vous avez un défi avec cette section ? Si c'est le cas, faites-nous part de vos commentaires pour que nous puissions l'améliorer.