Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
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 :
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.
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.
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 :
- Surcharge ToString() qui produit une chaîne de résultat pour le CurrentCulture.
- Méthode Invariant qui produit une chaîne pour le InvariantCulture.
- Méthode ToString(IFormatProvider) qui produit une chaîne de résultat pour une culture spécifiée.
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!