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:
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.
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.
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é:
ToString()Přetížení, které vytváří výsledný řetězec pro CurrentCulture .
InvariantMetoda, která vytváří řetězec pro InvariantCulture .
ToString(IFormatProvider)Metoda, která vytváří výsledný řetězec pro zadanou jazykovou verzi.
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!