Megosztás a következőn keresztül:


Interpolált sztringek (Visual Basic referencia)

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. A következő interpolált sztring például két interpolált kifejezést tartalmaz, {name} és {hours:hh}:

Console.WriteLine($"Name = {name}, hours = {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> ..."

Helyszín:

  • field-width 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.

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

Fontos

Nem lehet szóköz a $ és a " között, amelyek a karakterláncot indítják. 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 kapcsos zárójelet ("{" vagy "}") szeretne egy interpolált sztringben szerepeltetni, használjon két kapcsos zárójelet, "{{" vagy "}}". További információ: Implicit konverziók.

Ha az interpolált sztring más, speciális jelentésű karaktereket tartalmaz, például idézőjelet ("), kettőspontot (:) vagy vesszőt (,), akkor escape-elni kell ezeket, ha szó szerinti szövegben fordulnak elő. Vagy ha egy interpolált kifejezés nyelvi elemei, akkor zárójelekkel tagolt kifejezésben kell szerepelniük. Az alábbi példa az idézőjeleket használja, hogy belefoglalja őket az eredményként kiadott szövegláncba.

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. Az interpolált karakterlánc String-ra/-re való átalakítása. Az alábbi példa egy olyan sztringet ad vissza, amelyben a kifejezések helyére azok sztring reprezentációi kerültek. Például:

    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 karakterlánc értelmezés végső eredménye. A kettős kapcsos zárójelek ("{{" és "}}") minden előfordulása egyetlen kapcsos zárójellé alakul át.

  2. Interpolált sztring átalakítása egy IFormattable változóvá, amely lehetővé teszi több eredménysztring létrehozását 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 adja át, például WriteLine(String)a formázási elemek 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 például segíthet abban, hogy védelmet biztosítson egy injektálásos támadással szemben, ha lekérdezést készítünk. 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