Share via


Interpolerade strängar (Visual Basic-referens)

Används för att konstruera strängar. En interpolerad sträng ser ut som en mallsträng som innehåller interpolerade uttryck. En interpolerad sträng returnerar en sträng som ersätter de interpolerade uttryck som den innehåller med deras strängrepresentationer. Den här funktionen är tillgänglig i Visual Basic 14 och senare versioner.

Argumenten för en interpolerad sträng är lättare att förstå än en sammansatt formatsträng. Till exempel den interpolerade strängen

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

innehåller två interpolerade uttryck, {name} och {hours:hh}. Motsvarande sammansatt formatsträng är:

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

Strukturen för en interpolerad sträng är:

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

där:

  • fältbredd är ett signerat heltal som anger antalet tecken i fältet. Om det är positivt är fältet högerjusterat. om den är negativ, vänsterjusterad.

  • formatsträng är en formatsträng som är lämplig för den typ av objekt som formateras. För ett DateTime värde kan det till exempel vara en standardformatsträng för datum och tid, till exempel "D" eller "d".

Viktigt!

Du kan inte ha något tomt utrymme mellan $ och " som startar strängen. Detta orsakar ett kompilatorfel.

Du kan använda en interpolerad sträng var som helst där du kan använda en strängliteral. Den interpolerade strängen utvärderas varje gång koden med den interpolerade strängen körs. På så sätt kan du avgränsa definitionen och utvärderingen av en interpolerad sträng.

Om du vill inkludera en klammerparentes ("{" eller "}") i en interpolerad sträng använder du två klammerparenteser, "{{" eller "}}". Mer information finns i avsnittet Implicita konverteringar.

Om den interpolerade strängen innehåller andra tecken med särskild betydelse i en interpolerad sträng, till exempel citattecknet ("), kolon (:) eller kommatecken (,), bör de tas bort om de förekommer i literaltext, eller om de ska ingå i ett uttryck som avgränsas av parenteser om de är språkelement som ingår i ett interpolerat uttryck. I följande exempel undviks citattecken för att inkludera dem i resultatsträngen:

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.

Implicita konverteringar

Det finns tre implicita typkonverteringar från en interpolerad sträng:

  1. Konvertering av en interpolerad sträng till en String. I följande exempel returneras en sträng vars interpolerade stränguttryck har ersatts med deras strängrepresentationer. Till exempel:

    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>
    

    Detta är slutresultatet av en strängtolkning. Alla förekomster av dubbla klammerparenteser ("{{" och "}}") konverteras till en enda klammerparentes.

  2. Konvertering av en interpolerad sträng till en IFormattable variabel som gör att du kan skapa flera resultatsträngar med kulturspecifikt innehåll från en enda IFormattable instans. Detta är användbart för att inkludera sådana saker som rätt numeriska format och datumformat för enskilda kulturer. Alla förekomster av dubbla klammerparenteser ("{{" och "}}") förblir som dubbla klammerparenteser tills du formaterar strängen genom att explicit eller implicit anropa ToString() metoden. Alla inneslutna interpolationsuttryck konverteras till {0}, {1}och så vidare.

    I följande exempel används reflektion för att visa medlemmar samt fält- och egenskapsvärden för en IFormattable variabel som skapas från en interpolerad sträng. Den skickar även variabeln IFormattableConsole.WriteLine(String) till -metoden.

    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>
    
    

    Observera att den interpolerade strängen endast kan inspekteras med hjälp av reflektion. Om den skickas till en strängformateringsmetod, till exempel WriteLine(String), matchas dess formatobjekt och resultatsträngen returneras.

  3. Konvertering av en interpolerad sträng till en FormattableString variabel som representerar en sammansatt formatsträng. Genom att granska den sammansatta formatsträngen och hur den återges som en resultatsträng kan det till exempel hjälpa dig att skydda dig mot en inmatningsattack om du skapar en fråga. A FormattableString innehåller även:

    Alla förekomster av dubbla klammerparenteser ("{{" och "}}") förblir som dubbla klammerparenteser tills du formaterar. Alla inneslutna interpolationsuttryck konverteras till {0}, {1}och så vidare.

    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!
    
    

Se även