Stringhe interpolate (riferimenti per Visual Basic)Interpolated Strings (Visual Basic Reference)

Vengono usate per la costruzione di stringhe.Used to construct strings. Una stringa interpolata è simile a una stringa di modello che contiene espressioni interpolate.An interpolated string looks like a template string that contains interpolated expressions. Una stringa interpolata restituisce una stringa che sostituisce le espressioni interpolate in essa contenute con le rappresentazioni di stringa.An interpolated string returns a string that replaces the interpolated expressions that it contains with their string representations. Questa funzionalità è disponibile in Visual Basic 14 e versioni successive.This feature is available in Visual Basic 14 and later versions.

Gli argomenti di una stringa interpolata sono più facili da comprendere rispetto a una stringa di formato composito.The arguments of an interpolated string are easier to understand than a composite format string. Ad esempio, la stringa interpolataFor example, the interpolated string

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

contiene due espressioni interpolate, '{name}' e '{hours: hh}'.contains two interpolated expressions, '{name}' and '{hours:hh}'. La stringa di formato composito equivalente è:The equivalent composite format string is:

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

La struttura di una stringa interpolata è:The structure of an interpolated string is:

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

dove:where:

  • field-width è un intero con segno che indica il numero di caratteri nel campo.field-width is a signed integer that indicates the number of characters in the field. Se è positivo, il campo viene allineato a destra; se è negativo, viene allineato a sinistra.If it is positive, the field is right-aligned; if negative, left-aligned.

  • format-string è una stringa di formato appropriata per il tipo di oggetto formattato.format-string is a format string appropriate for the type of object being formatted. Per un valore DateTime, ad esempio, può essere una stringa di formato di data e ora standard , ad esempio "d" o "d".For example, for a DateTime value, it could be a standard date and time format string such as "D" or "d".

Importante

Tra $ e il simbolo " all'inizio della stringa non possono essere presenti spazi vuoti,You cannot have any white space between the $ and the " that starts the string. Questa operazione causa un errore del compilatore.Doing so causes a compiler error.

È possibile usare una stringa interpolata ovunque sia possibile usare un valore letterale stringa.You can use an interpolated string anywhere you can use a string literal. La stringa interpolata viene valutata ogni volta che si esegue codice con la stringa interpolata.The interpolated string is evaluated each time the code with the interpolated string executes. Ciò consente di separare la definizione e la valutazione di una stringa interpolata.This allows you to separate the definition and evaluation of an interpolated string.

Per includere una parentesi graffa ("{" o "}") in una stringa interpolata, digitarne due, ovvero "{{" o "}}".To include a curly brace ("{" or "}") in an interpolated string, use two curly braces, "{{" or "}}". Per altri dettagli, vedere la sezione Conversioni implicite.See the Implicit Conversions section for more details.

Se la stringa interpolata contiene altri caratteri con un significato speciale in una stringa interpolata, ad esempio virgolette doppie ("), due punti (:) o virgola (,), è necessario specificare il carattere di escape se si presentano nel testo letterale, oppure inserirli in un'espressione racchiusa tra parentesi se sono elementi del linguaggio inclusi in un'espressione interpolata.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. Nell'esempio seguente viene specificato il carattere di escape delle virgolette per includerle nella stringa di risultato e si usano le parentesi per delimitare l'espressione (age == 1 ? "" : "s") in modo che i due punti non vengano interpretati come l'inizio di una stringa di formato.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>

Conversioni impliciteImplicit Conversions

Da una stringa interpolata vengono effettuate tre conversioni di tipo implicito:There are three implicit type conversions from an interpolated string:

  1. Conversione di una stringa interpolata in una String.Conversion of an interpolated string to a String. L'esempio seguente restituisce una stringa in cui le espressioni di stringa interpolata sono state sostituite con le rappresentazioni di stringa.The following example returns a string whose interpolated string expressions have been replaced with their string representations. Ad esempio: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>
    

    Questo è il risultato finale di un'interpretazione della stringa.This is the final result of a string interpretation. Tutte le occorrenze delle parentesi graffe doppie ("{{" e "}}") vengono convertite in parentesi graffe singole.All occurrences of double curly braces ("{{" and "}}") are converted to a single curly brace.

  2. Conversione di una stringa interpolata in una variabile IFormattable che consente di creare più stringhe risultato con contenuto specifico delle impostazioni cultura da una singola istanza di 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. Ciò è utile per includere elementi quali i formati numerici e di data corretti per singole impostazioni cultura.This is useful for including such things as the correct numeric and date formats for individual cultures. Tutte le occorrenze di parentesi graffe doppie ("{{" e "}}") rimangono tali finché la stringa non viene formattata in modo implicito o esplicito chiamando il metodo 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. Tutte le espressioni di interpolazione contenute vengono convertite in {0}, {1}e così via.All contained interpolation expressions are converted to {0}, {1}, and so on.

    Nell'esempio seguente viene usata la reflection per visualizzare i membri, nonché i valori di campi e le proprietà di una variabile IFormattable creata da una stringa interpolata.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. Viene anche passata la variabile IFormattable al metodo 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>
    
    

    Si noti che la stringa interpolata può essere controllata solo tramite reflection.Note that the interpolated string can be inspected only by using reflection. Se viene passata a un metodo di formattazione delle stringhe, ad esempio WriteLine(String), gli elementi di formato vengono risolti e viene restituita la stringa risultato.If it is passed to a string formatting method, such as WriteLine(String), its format items are resolved and the result string returned.

  3. Conversione di una stringa interpolata in una variabile FormattableString che rappresenta una stringa di formato composito.Conversion of an interpolated string to a FormattableString variable that represents a composite format string. Grazie all'esame della stringa di formato composito e del modo in cui viene eseguito il rendering come stringa di risultato, è ad esempio possibile attuare misure di protezione contro attacchi di tipo injection durante la creazione di una query.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 include anche:A FormattableString also includes:

    Tutte le occorrenze di parentesi graffe doppie ("{{" e "}}") rimangono come doppie parentesi graffe fino a quando non si formatta.All occurrences of double curly braces ("{{" and "}}") remain as double curly braces until you format. Tutte le espressioni di interpolazione contenute vengono convertite in {0}, {1}e così via.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!
    
    

Vedere ancheSee also