Partager via


Chaînes interpolées (Référence Visual Basic)

Utilisé pour construire des chaînes. Une chaîne interpolée ressemble à une chaîne de modèle qui contient des expressions interpolées. Une chaîne interpolée retourne une chaîne qui remplace les expressions interpolées qu’elle contient par leurs représentations sous forme de chaîne. Cette fonctionnalité est disponible dans Visual Basic 14 et versions ultérieures.

Les arguments d’une chaîne interpolée sont plus faciles à comprendre qu’une chaîne de format composite. Par exemple, la chaîne interpolée suivante contient deux expressions interpolées et {name}{hours:hh}:

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

La chaîne de format composite équivalente est la suivante :

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

La structure d’une chaîne interpolée est la suivante :

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

Où :

  • field-width est un entier signé qui indique le nombre de caractères dans le champ. S’il est positif, le champ est aligné à droite ; si négatif, aligné à gauche.

  • format-string est une chaîne de format appropriée pour le type d’objet mis en forme. Par exemple, pour une DateTime valeur, il peut s’agir d’une chaîne de format de date et d’heure standard telle que « D » ou « d ».

Important

Vous ne pouvez pas avoir d’espace blanc entre la $ chaîne et celle " qui démarre la chaîne. Cela provoque une erreur du compilateur.

Vous pouvez utiliser une chaîne interpolée partout où vous pouvez utiliser un littéral de chaîne. La chaîne interpolée est évaluée chaque fois que le code avec la chaîne interpolée s’exécute. Cela vous permet de séparer la définition et l’évaluation d’une chaîne interpolée.

Pour inclure une accolades (« { » ou « } ») dans une chaîne interpolée, utilisez deux accolades, « {{ » ou « }} ». Pour plus d’informations, consultez Conversions implicites.

Si la chaîne interpolée contient d’autres caractères ayant une signification spéciale dans une chaîne interpolée, par exemple le guillemet ("), le signe deux-points (:) ou la virgule),ils doivent être placés dans un échappement s’ils se produisent dans du texte littéral. Ou, s’il s’agit d’éléments de langage inclus dans une expression interpolée, ils doivent être inclus dans une expression délimitée par des parenthèses. L’exemple suivant montre comment insérer des guillemets pour les inclure dans la chaîne de résultat :

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.

Conversions implicites

Il existe trois conversions de types implicites à partir d’une chaîne interpolée :

  1. Conversion d’une chaîne interpolée en un String. L’exemple suivant retourne une chaîne dont les expressions de chaîne interpolées ont été remplacées par leurs représentations sous forme de chaîne. Par exemple:

    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. Toutes les occurrences de accolades doubles (« {{ » et « }} ») sont converties en accolades simples.

  2. Conversion d’une IFormattable chaîne interpolée en variable qui vous permet de créer plusieurs chaînes de résultats avec du contenu spécifique à la culture à partir d’une seule IFormattable instance. Cela est utile pour inclure des éléments tels que les formats numériques et de date corrects pour les cultures individuelles. Toutes les occurrences de accolades doubles (« {{ » et « }} ») restent sous forme d’accolades doubles jusqu’à ce que vous mettez en forme la chaîne en appelant explicitement ou implicitement la ToString() méthode. Toutes les expressions d’interpolation contenues sont converties en {0}, {1}et ainsi de suite.

    L’exemple suivant utilise la réflexion pour afficher les membres ainsi que les valeurs de champ et de propriété d’une IFormattable variable créée à partir d’une chaîne interpolée. Il transmet également la IFormattable variable à la Console.WriteLine(String) méthode.

    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. S’il est passé à une méthode de mise en forme de chaîne, par exemple WriteLine(String), ses éléments de format sont résolus et la chaîne de résultat retournée.

  3. Conversion d’une FormattableString chaîne interpolée en variable qui représente une chaîne de format composite. L’inspection de la chaîne de format composite et la façon dont elle s’affiche en tant que chaîne de résultat peut, par exemple, vous aider à vous protéger contre une attaque par injection si vous générez une requête. A FormattableString également inclus :

    Toutes les occurrences de accolades doubles (« {{ » et « }} ») restent sous forme d’accolades doubles jusqu’à ce que vous mettez en forme. Toutes les expressions d’interpolation contenues sont converties en {0}, {1}et ainsi de suite.

    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 aussi