$ - interpolation des cordes (référence C)

Le caractère spécial $ identifie un littéral de chaîne comme une chaîne interpolée. Une chaîne interpolée est un littéral de chaîne qui peut contenir des expressions d’interpolation. Quand une chaîne interpolée est résolue en une chaîne de résultat, les éléments avec des expressions d’interpolation sont remplacés par les représentations sous forme de chaîne des résultats des expressions. Cette fonctionnalité est disponible en commençant par le C 6.

L’interpolation de chaîne offre une syntaxe plus lisible et plus simple pour créer des chaînes mises en forme que la fonctionnalité de mise en forme de chaîne composite. L’exemple suivant utilise les deux fonctionnalités pour produire la même sortie :

string name = "Mark";
var date = DateTime.Now;

// Composite formatting:
Console.WriteLine("Hello, {0}! Today is {1}, it's {2:HH:mm} now.", name, date.DayOfWeek, date);
// String interpolation:
Console.WriteLine($"Hello, {name}! Today is {date.DayOfWeek}, it's {date:HH:mm} now.");
// Both calls produce the same output that is similar to:
// Hello, Mark! Today is Wednesday, it's 19:40 now.

Structure d’une chaîne interpolée

Pour identifier un littéral de chaîne comme chaîne interpolée, préfixez-la du symbole $. N’ajoutez pas d’espace entre les signes $ et " au début d’un littéral de chaîne.

La structure d’un élément avec une expression d’interpolation se présente comme suit :

{<interpolationExpression>[,<alignment>][:<formatString>]}

Les éléments entre crochets sont facultatifs. Le tableau suivant décrit chaque élément :

Élément Description
interpolationExpression Expression qui produit un résultat à mettre en forme. Représentation des null String.Emptycordes de est .
alignment L’expression constante dont la valeur définit le nombre minimum de caractères dans la représentation de chaîne du résultat d’expression. Si le nombre est positif, la représentation sous forme de chaîne est alignée à droite ; s’il est négatif, elle est alignée à gauche. Pour plus d'informations, consultez Composant d’alignement.
formatString Chaîne de format qui est prise en charge par le type de résultat de l’expression. Pour plus d'informations, consultez Composant de chaîne de format.

L’exemple suivant utilise les composants de mise en forme facultatifs décrits ci-dessus :

Console.WriteLine($"|{"Left",-7}|{"Right",7}|");

const int FieldWidthRightAligned = 20;
Console.WriteLine($"{Math.PI,FieldWidthRightAligned} - default formatting of the pi number");
Console.WriteLine($"{Math.PI,FieldWidthRightAligned:F3} - display only three decimal digits of the pi number");
// Expected output is:
// |Left   |  Right|
//     3.14159265358979 - default formatting of the pi number
//                3.142 - display only three decimal digits of the pi number

Caractères spéciaux

Pour ajouter une accolade, « { » ou « } », dans le texte produit par une chaîne interpolée, entrez deux accolades, « {{ » ou « }} ». Pour plus d'informations, consultez Accolades d’échappement.

Comme le caractère deux-points (« : ») a une signification spéciale dans un élément d’expression d’interpolation, pour utiliser un opérateur conditionnel dans une expression d’interpolation, placez cette expression entre parenthèses.

L’exemple suivant montre comment ajouter une accolade dans une chaîne de résultat et comment utiliser un opérateur conditionnel dans une expression d’interpolation :

string name = "Horace";
int age = 34;
Console.WriteLine($"He asked, \"Is your name {name}?\", but didn't wait for a reply :-{{");
Console.WriteLine($"{name} is {age} year{(age == 1 ? "" : "s")} old.");
// Expected output is:
// He asked, "Is your name Horace?", but didn't wait for a reply :-{
// Horace is 34 years old.

Une chaîne textuelle interpolée $ commence par @ le personnage suivi du personnage. Pour plus d’informations sur les chaînes textuelles, consultez les rubriques string et Identificateur textuel.

Notes

En commençant par C 8.0, $ @ vous pouvez utiliser les $@"..." jetons et les jetons dans n’importe quel ordre : les deux et @$"..." sont valides interpolés chaînes textuelles. Dans les versions précédentes de C, le $ jeton doit apparaître devant le @ jeton.

Conversions implicites et IFormatProvider comment spécifier la mise en œuvre

Trois conversions implicites sont possibles à partir d’une chaîne interpolée :

  1. Conversion d’une chaîne interpolée en instance de String qui est le résultat de la résolution d’une chaîne interpolée avec des éléments d’expression d’interpolation remplacés par la représentation sous forme de chaîne correctement mise en forme de leurs résultats. Cette conversion CurrentCulture utilise les résultats d’expression de format.

  2. Conversion d’une chaîne interpolée en instance FormattableString qui représente une chaîne de format composite avec les résultats d’expression à mettre en forme. Cette conversion vous permet de créer plusieurs chaînes de résultat avec du contenu propre à la culture à partir d’une seule instance de FormattableString. Pour ce faire, appelez l’une des méthodes suivantes :

    Vous pouvez également ToString(IFormatProvider) utiliser la méthode pour fournir IFormatProvider une implémentation définie par l’utilisateur de l’interface qui prend en charge le formatage personnalisé. Pour plus d’informations, voir le formatage personnalisé avec la section ICustomFormatter des types de formatage dans l’article .NET.

  3. Conversion d’une chaîne interpolée en instance IFormattable qui vous permet aussi de créer plusieurs chaînes de résultat avec du contenu propre à la culture à partir d’une seule instance de IFormattable.

L’exemple suivant utilise la conversion implicite en FormattableString pour créer des chaînes de résultat propres à la culture :

double speedOfLight = 299792.458;
FormattableString message = $"The speed of light is {speedOfLight:N3} km/s.";

System.Globalization.CultureInfo.CurrentCulture = System.Globalization.CultureInfo.GetCultureInfo("nl-NL");
string messageInCurrentCulture = message.ToString();

var specificCulture = System.Globalization.CultureInfo.GetCultureInfo("en-IN");
string messageInSpecificCulture = message.ToString(specificCulture);

string messageInInvariantCulture = FormattableString.Invariant(message);

Console.WriteLine($"{System.Globalization.CultureInfo.CurrentCulture,-10} {messageInCurrentCulture}");
Console.WriteLine($"{specificCulture,-10} {messageInSpecificCulture}");
Console.WriteLine($"{"Invariant",-10} {messageInInvariantCulture}");
// Expected output is:
// nl-NL      The speed of light is 299.792,458 km/s.
// en-IN      The speed of light is 2,99,792.458 km/s.
// Invariant  The speed of light is 299,792.458 km/s.

Ressources supplémentaires

Si vous ne connaissez pas l’interpolation de chaînes, consultez le tutoriel interactif Interpolation de chaînes en C#. Vous pouvez également vérifier une autre interpolation de chaîne dans le tutoriel Cmd qui démontre comment utiliser des chaînes interpolées pour produire des cordes formatées.

Compilation de chaînes interpolées

Si une chaîne interpolée est de type string, elle est généralement transformée en un appel de méthode String.Format. Le compilateur peut remplacer String.Format par String.Concat si le comportement analysé équivaut à une concaténation.

Si une chaîne interpolée est de type IFormattable ou FormattableString, le compilateur génère un appel à la méthode FormattableStringFactory.Create.

spécification du langage C#

Pour plus d’informations, consultez la section Chaînes interpolées de la spécification du langage C#.

Voir aussi