Interpolált sztringek (visual basic reference)

Sztringek létrehozására szolgál. Az interpolált sztring úgy néz ki, mint egy interpolált kifejezéseket tartalmazó sablonsztring. Az interpolált sztring olyan sztringet ad vissza, amely az általa tartalmazott interpolált kifejezéseket a sztringreprezentációkkal helyettesíti. Ez a funkció a Visual Basic 14-ben és újabb verzióiban érhető el.

Az interpolált sztring argumentumai könnyebben érthetők, mint az összetett formátumú sztringek. Például az interpolált sztring

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

két interpolált kifejezést tartalmaz: "{name}" és "{hours:hh}". Az ezzel egyenértékű összetett formátum sztringje a következő:

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

Az interpolált sztring szerkezete a következő:

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

ahol:

  • A mezőszélesség egy aláírt egész szám, amely a mező karaktereinek számát jelzi. Ha pozitív, a mező jobbra van igazítva; ha negatív, balra igazított.

  • A format-string a formázandó objektum típusának megfelelő formátumsztring. Egy érték például DateTime lehet egy szabványos dátum- és időformátum-sztring, például "D" vagy "d".

Fontos

A sztringet indító és " a $ sztring között nem lehet szóköz. Ez fordítási hibát okoz.

Az interpolált sztringeket bárhol használhatja, ahol sztringkonstanst használhat. Az interpolált sztring minden alkalommal kiértékelésre kerül, amikor az interpolált sztringgel rendelkező kód végrehajtása történik. Ez lehetővé teszi egy interpolált sztring definíciójának és kiértékelésének elkülönítését.

Ha egy kapcsos kapcsos zárójelet ("{" vagy "}") szeretne egy interpolált sztringben szerepeltetni, használjon két kapcsos kapcsos zárójelet({{) vagy "}}". További részletekért tekintse meg az Implicit konverziók szakaszt.

Ha az interpolált sztring más, speciális jelentésű karaktereket tartalmaz egy interpolált sztringben, például idézőjelet ("), kettőspontot (:) vagy vesszőt (,), akkor meg kell őket szökni, ha literális szövegben fordulnak elő, vagy zárójelekkel tagolt kifejezésben kell szerepelniük, ha az interpolált kifejezés nyelvi elemei. Az alábbi példa az idézőjelek elől menekül, hogy belefoglalja őket az eredménysztringbe:

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.

Implicit konverziók

Egy interpolált sztringből három implicit típusú átalakítás van:

  1. Interpolált sztring Stringátalakítása . Az alábbi példa egy sztringet ad vissza, amelynek interpolált sztringkifejezéseit lecserélték a sztringre. Példa:

    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>
    

    Ez egy sztringértelmezés végeredménye. A kettős kapcsos zárójelek ("{{" és "}}") minden előfordulása egyetlen kapcsos kapcsos zárójelké alakul át.

  2. Interpolált sztring átalakítása változóvá IFormattable , amely lehetővé teszi, hogy több eredménysztringet hozzon létre kultúraspecifikus tartalommal egyetlen IFormattable példányból. Ez hasznos lehet például az egyes kultúrák megfelelő numerikus és dátumformátumainak beiktatásához. A kettős kapcsos zárójelek ("{{" és "}}") minden előfordulása dupla kapcsos zárójelként marad, amíg a metódus explicit vagy implicit meghívásával meg nem formázza a ToString() sztringet. A rendszer az összes tartalmazott interpolációs kifejezést átalakítja {0}, {1}és így tovább.

    Az alábbi példa tükröződéssel jeleníti meg egy interpolált sztringből létrehozott változó tagjait, valamint mező- és tulajdonságértékeit IFormattable . A változót a IFormattable metódusnak Console.WriteLine(String) is átadja.

    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>
    
    

    Vegye figyelembe, hogy az interpolált sztring csak tükröződés használatával vizsgálható meg. Ha egy sztringformázási metódusnak továbbítja, például WriteLine(String)a formátumelemek feloldódnak, és az eredménysztring vissza lesz adva.

  3. Interpolált sztring átalakítása összetett formátumú sztringet FormattableString képviselő változóvá. Az összetett formátumú sztring vizsgálata és annak eredménysztringként való megjelenítése segíthet például abban, hogy védelmet nyújtsunk egy injektálási támadással szemben, ha lekérdezést készít. A FormattableString következőkre is vonatkozik:

    A dupla kapcsos zárójelek ("{{" és "}}") minden előfordulása dupla kapcsos zárójelként marad, amíg meg nem formázza. A rendszer az összes tartalmazott interpolációs kifejezést átalakítja {0}, {1}és így tovább.

    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!
    
    

Lásd még