Interpolation de chaîne en C#String interpolation in C#

Ce tutoriel vous montre comment utiliser une interpolation de chaîne pour mettre en forme et inclure des résultats d’expressions dans une chaîne de résultat.This tutorial shows you how to use string interpolation to format and include expression results in a result string. Les exemples supposent que vous êtes familiarisé avec les concepts de base de C# et la mise en forme des types .NET.The examples assume that you are familiar with basic C# concepts and .NET type formatting. Si vous ne connaissez pas l’interpolation de chaînes ou la mise en forme de types .NET, consultez d’abord le tutoriel interactif sur l’interpolation de chaînes.If you are new to string interpolation or .NET type formatting, check out the interactive string interpolation tutorial first. Pour plus d’informations sur la mise en forme des types dans .NET, consultez la rubrique Mise en forme des types dans .NET.For more information about formatting types in .NET, see the Formatting Types in .NET topic.

Notes

Les exemples C# de cet article s’exécutent dans l’exécuteur et le terrain de jeu du code inline Try.NET.The C# examples in this article run in the Try.NET inline code runner and playground. Sélectionnez le bouton Exécuter pour exécuter un exemple dans une fenêtre interactive.Select the Run button to run an example in an interactive window. Une fois que vous avez exécuté le code, vous pouvez le modifier et exécuter le code modifié en resélectionnant Exécuter.Once you execute the code, you can modify it and run the modified code by selecting Run again. 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#.The modified code either runs in the interactive window or, if compilation fails, the interactive window displays all C# compiler error messages.

IntroductionIntroduction

La fonctionnalité Interpolation de chaîne s’appuie sur la fonctionnalité Mise en forme composite et fournit une syntaxe plus lisible et plus pratique pour inclure des résultats d’expressions mises en forme dans une chaîne de résultat.The string interpolation feature is built on top of the composite formatting feature and provides a more readable and convenient syntax to include formatted expression results in a result 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. Vous pouvez incorporer n’importe quelle expression C# valide qui retourne une valeur dans une chaîne interpolée.You can embed any valid C# expression that returns a value in an interpolated string. Dans l’exemple suivant, dès qu’une expression est évaluée, son résultat est converti en chaîne et est inclus dans une chaîne de résultat :In the following example, as soon as an expression is evaluated, its result is converted into a string and included in a result string:

double a = 3;
double b = 4;
Console.WriteLine($"Area of the right triangle with legs of {a} and {b} is {0.5 * a * b}");
Console.WriteLine($"Length of the hypotenuse of the right triangle with legs of {a} and {b} is {CalculateHypotenuse(a, b)}");

double CalculateHypotenuse(double leg1, double leg2) => Math.Sqrt(leg1 * leg1 + leg2 * leg2);

// Expected output:
// Area of the right triangle with legs of 3 and 4 is 6
// Length of the hypotenuse of the right triangle with legs of 3 and 4 is 5

Comme le montre l’exemple, vous incluez une expression dans une chaîne interpolée en la plaçant entre des accolades :As the example shows, you include an expression in an interpolated string by enclosing it with braces:

{<interpolatedExpression>}

Au moment de la compilation, une chaîne interpolée est généralement transformée en un appel de méthode String.Format.At compile time, an interpolated string is typically transformed into a String.Format method call. Ceci vous permet d’utiliser toutes les fonctions de la fonctionnalité Mise en forme de chaîne composite également avec des chaînes interpolées.That makes all the capabilities of the string composite formatting feature available to you to use with interpolated strings as well.

Le compilateur peut remplacer un String.Format par String.Concat si le comportement analysé équivaut à une concaténation.The compiler may substitute a String.Format for String.Concat if the analyzed behavior would be equivalent to concatenation.

Comment spécifier une chaîne de format pour une expression interpoléeHow to specify a format string for an interpolated expression

Vous spécifiez une chaîne de format prise en charge par le type du résultat d’expression en plaçant un signe deux-points (« : ») et la chaîne de format après l’expression interpolée :You specify a format string that is supported by the type of the expression result by following the interpolated expression with a colon (":") and the format string:

{<interpolatedExpression>:<formatString>}

L’exemple suivant montre comment spécifier des chaînes de format standard et personnalisées pour des expressions qui produisent des résultats de type date/heure ou numérique :The following example shows how to specify standard and custom format strings for expressions that produce date and time or numeric results:

var date = new DateTime(1731, 11, 25);
Console.WriteLine($"On {date:dddd, MMMM dd, yyyy} Leonhard Euler introduced the letter e to denote {Math.E:F5} in a letter to Christian Goldbach.");

// Expected output:
// On Sunday, November 25, 1731 Leonhard Euler introduced the letter e to denote 2.71828 in a letter to Christian Goldbach.

Pour plus d’informations, consultez la section Composant de chaîne de format de la rubrique Mise en forme composite.For more information, see the Format String Component section of the Composite Formatting topic. Cette section fournit des liens vers les rubriques qui décrivent les chaînes de format standard et personnalisées prises en charge par les types de base .NET.That section provides links to the topics that describe standard and custom format strings supported by .NET base types.

Comment contrôler la largeur de champ et l’alignement de l’expression interpolée mise en formeHow to control the field width and alignment of the formatted interpolated expression

Vous spécifiez la largeur minimale du champ et l’alignement du résultat d’expression mise en forme en plaçant une virgule («, ») et l’expression de constante à la fin de l’expression interpolée :You specify the minimum field width and the alignment of the formatted expression result by following the interpolated expression with a comma (",") and the constant expression:

{<interpolatedExpression>,<alignment>}

Si la valeur de l’alignement est positive, le résultat de l’expression mise en forme est aligné à droite ; si la valeur est négative, il est aligné à gauche.If the alignment value is positive, the formatted expression result is right-aligned; if negative, it's left-aligned.

Si vous devez spécifier à la fois un alignement et une chaîne de format, commencez par le composant d’alignement :If you need to specify both alignment and a format string, start with the alignment component:

{<interpolatedExpression>,<alignment>:<formatString>}

L’exemple suivant montre comment spécifier l’alignement ; il utilise des caractères de barre verticale (« | ») pour délimiter les champs texte :The following example shows how to specify alignment and uses pipe characters ("|") to delimit text fields:

const int NameAlignment = -9;
const int ValueAlignment = 7;

double a = 3;
double b = 4;
Console.WriteLine($"Three classical Pythagorean means of {a} and {b}:");
Console.WriteLine($"|{"Arithmetic",NameAlignment}|{0.5 * (a + b),ValueAlignment:F3}|");
Console.WriteLine($"|{"Geometric",NameAlignment}|{Math.Sqrt(a * b),ValueAlignment:F3}|");
Console.WriteLine($"|{"Harmonic",NameAlignment}|{2 / (1 / a + 1 / b),ValueAlignment:F3}|");

// Expected output:
// Three classical Pythagorean means of 3 and 4:
// |Arithmetic|  3.500|
// |Geometric|  3.464|
// |Harmonic |  3.429|

Comme le montre l’exemple de sortie, si la longueur du résultat d’expression mise en forme dépasse la largeur de champ spécifiée, la valeur de l’alignement est ignorée.As the example output shows, if the length of the formatted expression result exceeds specified field width, the alignment value is ignored.

Pour plus d’informations, consultez la section Composant d’alignement de la rubrique Mise en forme composite.For more information, see the Alignment Component section of the Composite Formatting topic.

Comment utiliser des séquences d’échappement dans une chaîne interpoléeHow to use escape sequences in an interpolated string

Les chaînes interpolées prennent en charge toutes les séquences d’échappement qui peuvent être utilisés dans les littéraux de chaîne ordinaires.Interpolated strings support all escape sequences that can be used in ordinary string literals. Pour plus d’informations, consultez Séquences d’échappement de chaîne.For more information, see String escape sequences.

Pour interpréter les séquences d’échappement littéralement, utilisez un littéral de chaîne textuelle.To interpret escape sequences literally, use a verbatim string literal. Une chaîne interpolée textuelle commence par le caractère $ suivi du caractère @.A verbatim interpolated string starts with the $ character followed by the @ character.

Pour inclure une accolade, « { » ou «} », dans une chaîne de résultat, utilisez deux accolades, « {{ » ou «}} ».To include a brace, "{" or "}", in a result string, use two braces, "{{" or "}}". Pour plus d’informations, consultez la section Échappement des accolades de la rubrique Mise en forme composite.For more information, see the Escaping Braces section of the Composite Formatting topic.

L’exemple suivant montre comment inclure des accolades dans une chaîne de résultat et construire une chaîne interpolée textuelle :The following example shows how to include braces in a result string and construct a verbatim interpolated string:

var xs = new int[] { 1, 2, 7, 9 };
var ys = new int[] { 7, 9, 12 };
Console.WriteLine($"Find the intersection of the {{{string.Join(", ",xs)}}} and {{{string.Join(", ",ys)}}} sets.");

var userName = "Jane";
var stringWithEscapes = $"C:\\Users\\{userName}\\Documents";
var verbatimInterpolated = $@"C:\Users\{userName}\Documents";
Console.WriteLine(stringWithEscapes);
Console.WriteLine(verbatimInterpolated);

// Expected output:
// Find the intersection of the {1, 2, 7, 9} and {7, 9, 12} sets.
// C:\Users\Jane\Documents
// C:\Users\Jane\Documents

Comment utiliser un opérateur conditionnel ternaire ?: dans une expression interpoléeHow to use a ternary conditional operator ?: in an interpolated expression

Comme le caractère deux-points (« : ») a une signification spéciale dans un élément avec une expression interpolée, pour utiliser un opérateur conditionnel dans une expression, placez-le entre parenthèses, comme le montre l’exemple suivant :As the colon (":") has special meaning in an item with an interpolated expression, in order to use a conditional operator in an expression, enclose it in parentheses, as the following example shows:

var rand = new Random();
for (int i = 0; i < 7; i++)
{
    Console.WriteLine($"Coin flip: {(rand.NextDouble() < 0.5 ? "heads" : "tails")}");
}

Comment créer une chaîne de résultat spécifique à une culture avec une interpolation de chaîneHow to create a culture-specific result string with string interpolation

Par défaut, une chaîne interpolée utilise la culture active définie par la propriété CultureInfo.CurrentCulture pour toutes les opérations de mise en forme.By default, an interpolated string uses the current culture defined by the CultureInfo.CurrentCulture property for all formatting operations. Utilisez la conversion implicite d’une chaîne interpolée en une instance de System.FormattableString et appelez sa méthode ToString(IFormatProvider) pour créer une chaîne de résultat spécifique à une culture.Use implicit conversion of an interpolated string to a System.FormattableString instance and call its ToString(IFormatProvider) method to create a culture-specific result string. L’exemple suivant montre comment effectuer cette opération :The following example shows how to do that:

var cultures = new System.Globalization.CultureInfo[]
{
    System.Globalization.CultureInfo.GetCultureInfo("en-US"),
    System.Globalization.CultureInfo.GetCultureInfo("en-GB"),
    System.Globalization.CultureInfo.GetCultureInfo("nl-NL"),
    System.Globalization.CultureInfo.InvariantCulture
};

var date = DateTime.Now;
var number = 31_415_926.536;
FormattableString message = $"{date,20}{number,20:N3}";
foreach (var culture in cultures)
{
    var cultureSpecificMessage = message.ToString(culture);
    Console.WriteLine($"{culture.Name,-10}{cultureSpecificMessage}");
}

// Expected output is like:
// en-US       5/17/18 3:44:55 PM      31,415,926.536
// en-GB      17/05/2018 15:44:55      31,415,926.536
// nl-NL        17-05-18 15:44:55      31.415.926,536
//            05/17/2018 15:44:55      31,415,926.536

Comme le montre l’exemple, vous pouvez utiliser une même instance de FormattableString pour générer plusieurs chaînes de résultat pour différentes cultures.As the example shows, you can use one FormattableString instance to generate multiple result strings for various cultures.

Comment créer une chaîne de résultat avec la culture invarianteHow to create a result string using the invariant culture

Avec la méthode FormattableString.ToString(IFormatProvider), vous pouvez utiliser la méthode statique FormattableString.Invariant pour résoudre une chaîne interpolée en une chaîne de résultat pour InvariantCulture.Along with the FormattableString.ToString(IFormatProvider) method, you can use the static FormattableString.Invariant method to resolve an interpolated string to a result string for the InvariantCulture. L’exemple suivant montre comment effectuer cette opération :The following example shows how to do that:

string messageInInvariantCulture = FormattableString.Invariant($"Date and time in invariant culture: {DateTime.Now}");
Console.WriteLine(messageInInvariantCulture);

// Expected output is like:
// Date and time in invariant culture: 05/17/2018 15:46:24

ConclusionConclusion

Ce tutoriel décrit des scénarios courants d’utilisation de l’interpolation de chaîne.This tutorial describes common scenarios of string interpolation usage. Pour plus d’informations sur l’interpolation de chaîne, consultez la rubrique Interpolation de chaîne.For more information about string interpolation, see the String interpolation topic. Pour plus d’informations sur la mise en forme des types dans .NET, consultez les rubriques Mise en forme des types dans .NET et Mise en forme composite.For more information about formatting types in .NET, see the Formatting Types in .NET and Composite formatting topics.

Voir aussiSee also