Chaînes interpolées (référence Visual Basic)Interpolated Strings (Visual Basic Reference)

Permettent de construire des chaînes.Used to construct strings. Une chaîne interpolée ressemble à une chaîne de modèle contenant des expressions interpolées.An interpolated string looks like a template string that contains interpolated expressions. Une chaîne interpolée retourne une chaîne qui remplace les expressions interpolées qu’elle contient par leur représentation sous forme de chaîne.An interpolated string returns a string that replaces the interpolated expressions that it contains with their string representations. Cette fonctionnalité est disponible dans Visual Basic 14 et versions ultérieures.This feature is available in Visual Basic 14 and later versions.

Les arguments d’une chaîne interpolée sont plus faciles à comprendre qu’une chaîne de format composite.The arguments of an interpolated string are easier to understand than a composite format string. Par exemple, la chaîne interpoléeFor example, the interpolated string

Console.WriteLine($"Name = {name}, hours = {hours:hh}")

contient deux expressions interpolées, ’{name}’ et ’{hours:hh}’.contains two interpolated expressions, '{name}' and '{hours:hh}'. La chaîne de format composite équivalente est la suivante :The equivalent composite format string is:

Console.WriteLine("Name = {0}, hours = {1:hh}", name, hours)

La structure d’une chaîne interpolée est :The structure of an interpolated string is:

$"<text> {<interpolated-expression> [,<field-width>] [:<format-string>] } <text> ..."

où :where:

  • field-width est un entier signé qui indique le nombre de caractères du champ.field-width is a signed integer that indicates the number of characters in the field. S’il est positif, le champ est aligné à droite ; s’il est négatif, il est aligné à gauche.If it is positive, the field is right-aligned; if negative, left-aligned.

  • format-string est une chaîne de format qui convient au type d’objet mis en forme.format-string is a format string appropriate for the type of object being formatted. Par exemple, pour une valeur DateTime, il peut s’agir d’une chaîne de format de date et d’heure standard telle que « d » ou « d ».For example, for a DateTime value, it could be a standard date and time format string such as "D" or "d".

Important

N’ajoutez pas d’espace blanc entre les signes $ et " au début de la chaîne.You cannot have any white space between the $ and the " that starts the string. Cela provoque une erreur du compilateur.Doing so causes a compiler error.

Vous pouvez utiliser une chaîne interpolée partout où vous pouvez utiliser un littéral de chaîne.You can use an interpolated string anywhere you can use a string literal. La chaîne interpolée est évaluée à chaque exécution du code contenant la chaîne interpolée.The interpolated string is evaluated each time the code with the interpolated string executes. Cela vous permet de séparer la définition et l’évaluation d’une chaîne interpolée.This allows you to separate the definition and evaluation of an interpolated string.

Pour ajouter une accolade ("{" ou "}") dans une chaîne interpolée, utilisez deux accolades "{{" ou "}}".To include a curly brace ("{" or "}") in an interpolated string, use two curly braces, "{{" or "}}". Pour plus d’informations, consultez la section « Conversions implicites ».See the Implicit Conversions section for more details.

Si la chaîne interpolée contient d’autres caractères ayant une signification particulière dans une chaîne interpolée, comme le guillemet ("), les deux-points (:) ou la virgule (,), ils doivent être échappés s’ils se trouvent dans du texte littéral, ou être inclus dans une expression délimitée par des parenthèses s’ils s’agit d’éléments de langage inclus dans une expression interpolée.If the interpolated string contains other characters with special meaning in an interpolated string, such as the quotation mark ("), colon (:), or comma (,), they should be escaped if they occur in literal text, or they should be included in an expression delimited by parentheses if they are language elements included in an interpolated expression. L’exemple suivant échappe des guillemets pour les inclure dans la chaîne de résultat, et utilise des parenthèses pour délimiter l’expression (age == 1 ? "" : "s") pour que le signe deux-points ne soit pas interprété comme commençant une chaîne de format.The following example escapes quotation marks to include them in the result string, and it uses parentheses to delimit the expression (age == 1 ? "" : "s") so that the colon is not interpreted as beginning a format string.

Public Module Example
   Public Sub Main()
      Dim name = "Horace"
      Dim age = 34
      Dim s1 = $"He asked, ""Is your name {name}?"", but didn't wait for a reply."
      Console.WriteLine(s1)
      
      Dim s2 = $"{name} is {age:D3} year{(If(age = 1, "", "s"))} old."
      Console.WriteLine(s2) 
   End Sub
End Module
' The example displays the following output:
'       He asked, "Is your name Horace?", but didn't wait for a reply.
'       Horace is 034 years old.
' </Snippet1>

Conversions implicitesImplicit Conversions

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

  1. La conversion d’une chaîne interpolée en un String.Conversion of an interpolated string to a String. L’exemple suivant retourne une chaîne dont les expressions de chaîne interpolée ont été remplacées par leur représentation sous forme de chaîne.The following example returns a string whose interpolated string expressions have been replaced with their string representations. Exemple :For example:

    Public Module Example
       Public Sub Main()
          Dim name = "Bartholomew"
          Dim s1 = $"Hello, {name}!"  
          Console.WriteLine(s1)
       End Sub
    End Module
    ' The example displays the following output:
    '      Hello, Bartholomew!
    ' </Snippet1>
    

    Il s’agit du résultat final d’une interprétation de chaîne.This is the final result of a string interpretation. Toutes les occurrences d’accolades doubles (« {{ » et « }} ») sont converties en une seule accolade.All occurrences of double curly braces ("{{" and "}}") are converted to a single curly brace.

  2. La conversion d’une chaîne interpolée en variable IFormattable qui permet de créer plusieurs chaînes de résultats avec un contenu spécifique de la culture, à partir d’une seule instance IFormattable.Conversion of an interpolated string to an IFormattable variable that allows you create multiple result strings with culture-specific content from a single IFormattable instance. Ce type de conversion est utile pour inclure des éléments, tels que les formats numériques et les formats de date adaptés à une culture.This is useful for including such things as the correct numeric and date formats for individual cultures. Toutes les occurrences d’accolades doubles (« {{ » et « }} ») sont conservées tant que vous ne mettez pas en forme la chaîne en appelant explicitement ou implicitement la méthode ToString().All occurrences of double curly braces ("{{" and "}}") remain as double curly braces until you format the string by explicitly or implicitly calling the ToString() method. Toutes les expressions d’interpolation contenues sont converties en {0}, {1}et ainsi de suite.All contained interpolation expressions are converted to {0}, {1}, and so on.

    L’exemple suivant utilise la réflexion pour afficher les membres ainsi que les valeurs de champ et de propriété d’une variable IFormattable créée à partir d’une chaîne interpolée.The following example uses reflection to display the members as well as the field and property values of an IFormattable variable that is created from an interpolated string. Il passe également la variable IFormattable à la méthode Console.WriteLine(String).It also passes the IFormattable variable to the Console.WriteLine(String) method.

    Imports System.Globalization
    Imports System.Reflection
    
    Public Module Example
       Public Sub Main()
          Dim price = 1000
          Dim s2 As IFormattable = $"The cost of this item is {price:C}."  
          ShowInfo(s2)
          CultureInfo.CurrentCulture = New CultureInfo("en-US")
          Console.WriteLine(s2)
          CultureInfo.CurrentCulture = New CultureInfo("fr-FR")
          Console.WriteLine(s2)      
       End Sub
    
       Private Sub ShowInfo(obj As Object)
          Console.WriteLine($"Displaying member information:{vbCrLf}")
          Dim t = obj.GetType()
          Dim flags = BindingFlags.Public Or BindingFlags.Instance Or BindingFlags.Static Or BindingFlags.NonPublic
          For Each m In t.GetMembers(flags) 
             Console.Write($"   {m.Name} {m.MemberType}")   
             If m.MemberType = MemberTypes.Property Then
                Dim p = t.GetProperty(m.Name, flags)
                Console.Write($"   Value: {p.GetValue(obj)}")         
             End If
             If m.MemberType = MemberTypes.Field Then
                Dim f = t.GetField(m.Name, flags)
                Console.Write($"   Value: {f.GetValue(obj)}")
             End If
             Console.WriteLine()
          Next
          Console.WriteLine($"-------{vbCrLf}")
       End Sub
    End Module
    ' The example displays the following output:
    Displaying member information:
    
    '       get_Format Method
    '       GetArguments Method
    '       get_ArgumentCount Method
    '       GetArgument Method
    '       ToString Method
    '       System.IFormattable.ToString Method
    '       ToString Method
    '       Equals Method
    '       GetHashCode Method
    '       GetType Method
    '       Finalize Method
    '       MemberwiseClone Method
    '       .ctor Constructor
    '       Format Property   Value: The cost of this item is {0:C}.
    '       ArgumentCount Property   Value: 1
    '       _format Field   Value: The cost of this item is {0:C}.
    '       _arguments Field   Value: System.Object[]
    '       -------
    '
    '       The cost of this item is $1,000.00.
    '       The cost of this item is 1 000,00 €.
    ' </Snippet1>
    
    

    Notez que la chaîne interpolée ne peut être inspectée qu’à l’aide de la réflexion.Note that the interpolated string can be inspected only by using reflection. Si elle est passée à une méthode de mise en forme de chaîne, telle que WriteLine(String), ses éléments de mise en forme sont résolus et la chaîne de résultat est retournée.If it is passed to a string formatting method, such as WriteLine(String), its format items are resolved and the result string returned.

  3. Conversion d’une chaîne interpolée en une variable FormattableString qui représente une chaîne de format composite.Conversion of an interpolated string to a FormattableString variable that represents a composite format string. L’inspection de la chaîne de format composite et de son rendu sous forme de chaîne de résultat, peut, par exemple, vous aider à réduire les risques d’attaque par injection pendant la création d’une requête.Inspecting the composite format string and how it renders as a result string might, for example, help you protect against an injection attack if you were building a query. Un FormattableString comprend également :A FormattableString also includes:

    Toutes les occurrences d’accolades doubles (« {{ » et « }} ») sont conservées sous la forme d’accolades doubles jusqu’à ce que vous le formatiez.All occurrences of double curly braces ("{{" and "}}") remain as double curly braces until you format. Toutes les expressions d’interpolation contenues sont converties en {0}, {1}et ainsi de suite.All contained interpolation expressions are converted to {0}, {1}, and so on.

    Imports System.Globalization
    
    Public Module Example
       Public Sub Main()
          Dim name = "Bartholomew"
          Dim s3 As FormattableString = $"Hello, {name}!"  
          Console.WriteLine($"String: '{s3.Format}'")
          Console.WriteLine($"Arguments: {s3.ArgumentCount}")
          Console.WriteLine($"Result string: {s3}")
       End Sub
    End Module
    ' The example displays the following output:
    '       String: 'Hello, {0}!'
    '       Arguments: 1
    '       Result string: Hello, Bartholomew!
    
    

Voir aussiSee also