Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Wordt gebruikt om tekenreeksen samen te stellen. Een geïnterpoleerde tekenreeks ziet eruit als een sjabloontekenreeks die geïnterpoleerde expressies bevat. Een geïnterpoleerde tekenreeks geeft een tekenreeks terug waarbij de geïnterpoleerde uitdrukkingen worden vervangen door hun tekenreeksweergaven. Deze functie is beschikbaar in Visual Basic 14 en nieuwere versies.
De argumenten van een geïnterpoleerde tekenreeks zijn gemakkelijker te begrijpen dan een samengestelde notatietekenreeks. De volgende geïnterpoleerde tekenreeks bevat bijvoorbeeld twee geïnterpoleerde expressies en {name}
{hours:hh}
:
Console.WriteLine($"Name = {name}, hours = {hours:hh}")
De equivalente tekenreeks voor samengestelde notatie is:
Console.WriteLine("Name = {0}, hours = {1:hh}", name, hours)
De structuur van een geïnterpoleerde tekenreeks is:
$"<text> {<interpolated-expression> [,<field-width>] [:<format-string>] } <text> ..."
Waar:
field-width
is een ondertekend geheel getal dat het aantal tekens in het veld aangeeft. Als het positief is, wordt het veld rechts uitgelijnd; indien negatief, links uitgelijnd.format-string
is een notatietekenreeks die geschikt is voor het type object dat wordt opgemaakt. Voor een DateTime waarde kan het bijvoorbeeld een standaardtekenreeks voor datum- en tijdnotatie zijn, zoals 'D' of 'd'.
Belangrijk
U kunt geen witruimte hebben tussen de $
en de "
waarmee de tekenreeks begint. Dit veroorzaakt een compilerfout.
U kunt een geïnterpoleerde tekenreeks overal gebruiken waar u een letterlijke tekenreeks kunt gebruiken. De geïnterpoleerde tekenreeks wordt telkens geëvalueerd wanneer de code met de geïnterpoleerde tekenreeks wordt uitgevoerd. Hiermee kunt u de definitie en evaluatie van een geïnterpoleerde tekenreeks scheiden.
Als u een accolade ("{" of "}") wilt opnemen in een geïnterpoleerde string, gebruikt u twee accolades: "{{" of "}}". Zie Impliciete conversies voor meer informatie.
Als de geïnterpoleerde tekenreeks andere tekens bevat met speciale betekenis, zoals het aanhalingsteken ("), dubbelpunt (:) of komma (,), moeten ze worden geescaped als ze voorkomen in letterlijke tekst. Of als ze taalelementen zijn die zijn opgenomen in een geïnterpoleerde expressie, moeten ze worden opgenomen in een expressie die wordt gescheiden door haakjes. Het volgende voorbeeld toont hoe je aanhalingstekens kunt escapen om ze in de resultaatstring weer te geven.
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.
Impliciete conversies
Er zijn drie impliciete typeconversies van een geïnterpoleerde tekenreeks:
Conversie van een geïnterpoleerde tekenreeks naar een String. In het volgende voorbeeld wordt een tekenreeks geretourneerd waarvan geïnterpoleerde tekenreeksexpressies zijn vervangen door de tekenreeksweergaven. Voorbeeld:
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>
Dit is het uiteindelijke resultaat van een interpretatie van een reeks tekens. Alle voorkomens van dubbele accolades ("{{" en "}}") worden geconverteerd naar één accolade.
Conversie van een geïnterpoleerde tekenreeks naar een IFormattable variabele waarmee u meerdere resultaattekenreeksen kunt maken met cultuurspecifieke inhoud van één IFormattable exemplaar. Dit is handig voor het opnemen van bijvoorbeeld de juiste numerieke en datumnotaties voor afzonderlijke culturen. Alle instances van dubbele accolades ("{{" en "}}") blijven dubbele accolades totdat u de tekenreeks opmaakt door expliciet of impliciet de methode ToString() aan te roepen. Alle ingesloten interpolatie-expressies worden geconverteerd naar {0}, {1}enzovoort.
In het volgende voorbeeld wordt weerspiegeling gebruikt om de leden weer te geven, evenals de veld- en eigenschapswaarden van een IFormattable variabele die is gemaakt op basis van een geïnterpoleerde tekenreeks. De variabele IFormattable wordt ook doorgegeven aan de methode Console.WriteLine(String).
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>
Houd er rekening mee dat de geïnterpoleerde tekenreeks alleen kan worden geïnspecteerd met behulp van reflectie. Als deze wordt doorgegeven aan een opmaakmethode voor tekenreeksen, zoals WriteLine(String), worden de opmaakitems omgezet en wordt de resultaattekenreeks geretourneerd.
Conversie van een geïnterpoleerde tekenreeks naar een FormattableString variabele die een samengestelde notatietekenreeks vertegenwoordigt. Het inspecteren van de indelingsreeks en hoe deze wordt weergegeven als resultaatreeks, kan u bijvoorbeeld helpen om te beschermen tegen een injectieaanval terwijl u een query maakt. Een FormattableString omvat ook:
- Een ToString() overload die een resultaatstring voor de CurrentCulture produceert.
- Een Invariant methode die een string voor de InvariantCulture produceert.
- Een ToString(IFormatProvider) methode die een resultaattekenreeks produceert voor een opgegeven cultuur.
Alle exemplaren van dubbele accolades ({{{ en }}) blijven behouden als dubbele accolades totdat u de opmaak hebt uitgevoerd. Alle ingesloten interpolatie-expressies worden geconverteerd naar {0}, {1}enzovoort.
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!