$-interpolation de chaîne (C# référence)$ - string interpolation (C# reference)

Le caractère spécial $ identifie un littéral de chaîne comme une chaîne interpolée.The $ special character identifies a string literal as an interpolated string. Une chaîne interpolée est un littéral de chaîne qui peut contenir des expressions d’interpolation.An interpolated string is a string literal that might contain interpolation expressions. 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.When an interpolated string is resolved to a result string, items with interpolation expressions are replaced by the string representations of the expression results. Cette fonctionnalité est disponible à partir C# de 6.This feature is available starting with 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.String interpolation provides a more readable and convenient syntax to create formatted strings than a string composite formatting feature. L’exemple suivant utilise les deux fonctionnalités pour produire la même sortie :The following example uses both features to produce the same output:

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éeStructure of an interpolated string

Pour identifier un littéral de chaîne comme chaîne interpolée, préfixez-la du symbole $.To identify a string literal as an interpolated string, prepend it with the $ symbol. N’ajoutez pas d’espace entre les signes $ et " au début d’un littéral de chaîne.You cannot have any white space between the $ and the " that starts a string literal.

La structure d’un élément avec une expression d’interpolation se présente comme suit :The structure of an item with an interpolation expression is as follows:

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

Les éléments entre crochets sont facultatifs.Elements in square brackets are optional. Le tableau suivant décrit chaque élément :The following table describes each element:

ÉlémentElement DescriptionDescription
interpolationExpression Expression qui produit un résultat à mettre en forme.The expression that produces a result to be formatted. La représentation sous forme de chaîne de null est String.Empty.String representation of null is String.Empty.
alignment Expression constante dont la valeur définit le nombre minimal de caractères dans la représentation sous forme de chaîne du résultat de l’expression.The constant expression whose value defines the minimum number of characters in the string representation of the expression result. 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.If positive, the string representation is right-aligned; if negative, it's left-aligned. Pour plus d'informations, consultez Composant d’alignement.For more information, see Alignment Component.
formatString Chaîne de format qui est prise en charge par le type de résultat de l’expression.A format string that is supported by the type of the expression result. Pour plus d'informations, consultez Composant de chaîne de format.For more information, see Format String Component.

L’exemple suivant utilise les composants de mise en forme facultatifs décrits ci-dessus :The following example uses optional formatting components described above:

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éciauxSpecial characters

Pour ajouter une accolade, « { » ou « } », dans le texte produit par une chaîne interpolée, entrez deux accolades, « {{ » ou « }} ».To include a brace, "{" or "}", in the text produced by an interpolated string, use two braces, "{{" or "}}". Pour plus d'informations, consultez Accolades d’échappement.For more information, see Escaping Braces.

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.As the colon (":") has special meaning in an interpolation expression item, in order to use a conditional operator in an interpolation expression, enclose that expression in parentheses.

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 :The following example shows how to include a brace in a result string and how to use a conditional operator in an interpolation expression:

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 caractère $ suivi du caractère @.An interpolated verbatim string starts with the $ character followed by the @ character. Pour plus d’informations sur les chaînes textuelles, consultez les rubriques string et Identificateur textuel.For more information about verbatim strings, see the string and verbatim identifier topics.

Notes

À C# partir de 8,0, vous pouvez utiliser les jetons$et@dans n’importe quel ordre : $@"..."et@$"..."sont des chaînes textuelles interpolées valides.Starting with C# 8.0, you can use the $ and @ tokens in any order: both $@"..." and @$"..." are valid interpolated verbatim strings. Dans les C# versions antérieures, le jeton $ doit apparaître avant le jeton @.In earlier C# versions, the $ token must appear before the @ token.

Conversions implicites et comment spécifier IFormatProvider implémentationImplicit conversions and how to specify IFormatProvider implementation

Trois conversions implicites sont possibles à partir d’une chaîne interpolée :There are three implicit conversions from an interpolated string:

  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.Conversion of an interpolated string to a String instance that is the result of interpolated string resolution with interpolation expression items being replaced with the properly formatted string representations of their results. Cette conversion utilise le CurrentCulture pour mettre en forme les résultats des expressions.This conversion uses the CurrentCulture to format expression results.

  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.Conversion of an interpolated string to a FormattableString instance that represents a composite format string along with the expression results to be formatted. 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.That allows you to create multiple result strings with culture-specific content from a single FormattableString instance. Pour ce faire, appelez l’une des méthodes suivantes :To do that, call one of the following methods:

    Vous pouvez également utiliser la méthode ToString(IFormatProvider) pour fournir une implémentation définie par l’utilisateur de l’interface IFormatProvider qui prend en charge une mise en forme personnalisée.You also can use the ToString(IFormatProvider) method to provide a user-defined implementation of the IFormatProvider interface that supports custom formatting. Pour plus d’informations, consultez la section mise en forme personnalisée avec ICustomFormatter de l’article mise en forme des types dans .net .For more information, see the Custom formatting with ICustomFormatter section of the Formatting types in .NET article.

  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.Conversion of an interpolated string to an IFormattable instance that also allows you to create multiple result strings with culture-specific content from a single IFormattable instance.

L’exemple suivant utilise la conversion implicite en FormattableString pour créer des chaînes de résultat propres à la culture :The following example uses implicit conversion to FormattableString to create culture-specific result strings:

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émentairesAdditional resources

Si vous ne connaissez pas l’interpolation de chaînes, consultez le tutoriel interactif Interpolation de chaînes en C#.If you are new to string interpolation, see the String interpolation in C# interactive tutorial. Vous pouvez également consulter un autre tutoriel sur l’interpolation de chaîne en C# qui montre comment utiliser des chaînes interpolées pour produire des chaînes mises en forme.You also can check another String interpolation in C# tutorial that demonstrates how to use interpolated strings to produce formatted strings.

Compilation de chaînes interpoléesCompilation of interpolated strings

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.If an interpolated string has the type string, it's typically transformed into a String.Format method call. Le compilateur peut remplacer String.Format par String.Concat si le comportement analysé équivaut à une concaténation.The compiler may replace String.Format with String.Concat if the analyzed behavior would be equivalent to concatenation.

Si une chaîne interpolée est de type IFormattable ou FormattableString, le compilateur génère un appel à la méthode FormattableStringFactory.Create.If an interpolated string has the type IFormattable or FormattableString, the compiler generates a call to the FormattableStringFactory.Create method.

spécification du langage C#C# language specification

Pour plus d’informations, consultez la section Chaînes interpolées de la spécification du langage C#.For more information, see the Interpolated strings section of the C# language specification.

Voir aussiSee also