interpolované řetězce (Visual Basic Reference)

Slouží k vytváření řetězců. Interpolovaná řetězcová událost vypadá jako řetězec šablony, který obsahuje interpolované výrazy. Interpolovaná řetězcová funkce vrátí řetězec, který nahradí interpolované výrazy, které obsahuje, spolu s jejich řetězcovými reprezentacemi. tato funkce je k dispozici v Visual Basic 14 a novějších verzích.

Argumenty interpolované řetězcové řetězce jsou snazší pochopit než složený formátovací řetězec. Například interpolovaná řetězcová

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

obsahuje dva interpolované výrazy {Name} a {hours: hh}. Ekvivalentní řetězec složeného formátu je:

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

Struktura interpolované řetězcové řetězce je:

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

kde:

  • Šířka pole je celé číslo se znaménkem, které označuje počet znaků v poli. Pokud je kladné, pole je zarovnáno vpravo; If negativně zarovnaný doleva.

  • řetězec formátu je řetězec formátu vhodný pro typ objektu, který se má formátovat. Například pro DateTime hodnotu může být standardní formátovací řetězec data a času , například "d" nebo "d".

Důležité

Mezi znakem $ a " , který začíná řetězcem, nemůže být mezera. V důsledku toho dojde k chybě kompilátoru.

Můžete použít interpolované řetězce kdekoli, kde můžete použít řetězcový literál. Interpolovaná řetězcová doba je vyhodnocena pokaždé, když se spustí kód s interpolovaná řetězcovou dobou. To umožňuje oddělit definici a vyhodnocení interpolované řetězcové lhůty.

Chcete-li zahrnout složenou závorku ("{" nebo "}") do interpolované řetězcové řetězce, použijte dvě složené závorky, "{{" nebo "}}". Další podrobnosti najdete v části implicitní převody.

Pokud interpolovaná řetězec obsahuje jiné znaky se zvláštními významy v interpolované řetězcové podobě, například uvozovky ("), dvojtečka (:) nebo čárka (,), měly by být uvozeny řídicími znaky, pokud se vyskytují v textovém literálu, nebo by měly být zahrnuty ve výrazu odděleném závorkami, pokud jsou prvky jazyka zahrnuté v interpolované výrazu. Následující příklad řídí uvozovky pro jejich zahrnutí do výsledného řetězce:

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.

Implicitní převody

Existují tři implicitní převody typu z interpolované řetězce:

  1. Konverze interpolované řetězcové na String . Následující příklad vrátí řetězec, jehož interpolované řetězcové výrazy byly nahrazeny svými reprezentacemi řetězců. Například:

    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>
    

    Toto je konečný výsledek interpretace řetězce. Všechny výskyty dvojitých složených závorek ("{{" a "}}") jsou převedeny na jednu složenou závorku.

  2. Převod interpolované řetězce na IFormattable proměnnou, která umožňuje vytvořit více výsledných řetězců s obsahem specifickým pro jazykovou verzi z jedné IFormattable instance. To je užitečné pro zahrnutí takových věcí jako správných formátů číselného a data pro jednotlivé kultury. Všechny výskyty dvojitých složených závorek ("{{" a "}}") zůstávají jako dvojité složené závorky, dokud řetězec neformátujete explicitně nebo implicitně voláním ToString() metody. Všechny obsažené výrazy interpolace jsou převedeny na {0} , {1} a tak dále.

    Následující příklad používá reflexi k zobrazení členů a hodnot pole a vlastností IFormattable proměnné, která je vytvořena z interpolované řetězcové hodnoty. Také předá IFormattable proměnnou Console.WriteLine(String) metodě.

    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>
    
    

    Všimněte si, že interpolovaná řetězcová operace může být zkontrolována pouze pomocí reflexe. Pokud je předána metodě formátování řetězce, například WriteLine(String) , jsou vyřešeny jeho položky formátu a výsledný řetězec je vrácen.

  3. Konverze interpolované řetězce na FormattableString proměnnou, která představuje řetězec složeného formátu. Kontrola složeného formátovacího řetězce a jeho vykreslení jako výsledný řetězec může například přispět k ochraně proti útoku prostřednictvím injektáže, pokud jste sestavování dotazu. FormattableStringZahrnuje také:

    Všechny výskyty dvojitých složených závorek ("{{" a "}}") zůstávají jako dvojité složené závorky, dokud je neformátujete. Všechny obsažené výrazy interpolace jsou převedeny na {0} , {1} a tak dále.

    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!
    
    

Viz také