Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Zum Erstellen von Zeichenfolgen verwendet. Eine interpolierte Zeichenfolge sieht wie eine Vorlagenzeichenfolge aus, die interpolierte Ausdrücke enthält. Eine interpolierte Zeichenfolge ist eine Zeichenfolge, die die darin enthaltenen interpolierten Ausdrücke durch ihre Zeichenfolgendarstellungen ersetzt. Dieses Feature ist in Visual Basic 14 und höheren Versionen verfügbar.
Die Argumente einer interpolierten Zeichenfolge sind einfacher zu verstehen als eine zusammengesetzte Formatzeichenfolge. Die folgende interpolierte Zeichenfolge enthält beispielsweise zwei interpolierte Ausdrücke: {name}
und {hours:hh}
.
Console.WriteLine($"Name = {name}, hours = {hours:hh}")
Die entsprechende zusammengesetzte Formatzeichenfolge lautet:
Console.WriteLine("Name = {0}, hours = {1:hh}", name, hours)
Die Struktur einer interpolierten Zeichenfolge lautet:
$"<text> {<interpolated-expression> [,<field-width>] [:<format-string>] } <text> ..."
Wo:
field-width
ist eine signierte ganze Zahl, die die Anzahl der Zeichen im Feld angibt. Wenn positiv, ist das Feld rechtsbündig; wenn negativ, ist es linksbündig.format-string
ist eine Formatzeichenfolge, die für den Typ des zu formatierenden Objekts geeignet ist. Bei einem DateTime Wert kann es sich z. B. um eine standardmäßige Datums- und Uhrzeitformatzeichenfolge wie "D" oder "d" sein.
Von Bedeutung
Zwischen $
und "
am Anfang der Zeichenfolge dürfen sich keine Leerzeichen befinden. Dadurch tritt ein Compilerfehler auf.
Eine interpolierte Zeichenfolge können Sie überall dort verwenden, wo Sie ein Zeichenfolgenliteral verwenden. Die interpolierte Zeichenfolge wird jedes Mal ausgewertet, wenn der Code mit der interpolierten Zeichenfolge ausgeführt wird. Auf diese Weise können Sie die Definition und Auswertung einer interpolierten Zeichenfolge trennen.
Um eine geschweifte Klammer ("{" oder "}") in eine interpolierte Zeichenfolge einzuschließen, verwenden Sie zwei geschweifte Klammern, "{{" oder "}}". Weitere Informationen finden Sie unter implizite Konvertierungen.
Wenn die interpolierte Zeichenfolge andere Zeichen mit besonderer Bedeutung in einer interpolierten Zeichenfolge enthält, z. B. das Anführungszeichen ("), Doppelpunkt (:) oder Komma (,), müssen diese Zeichen bei der Verwendung in einem Literaltext mit einem Escape-Zeichen versehen werden. Oder wenn sie Sprachelemente sind, die in einem interpolierten Ausdruck enthalten sind, sollten sie in einen Ausdruck eingeschlossen werden, der durch Klammern getrennt ist. Im folgenden Beispiel werden Anführungszeichen mit Anführungszeichen versehen, um sie in die Ergebniszeichenfolge einzuschließen:
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.
Implizite Konvertierungen
Es gibt drei implizite Typkonvertierungen aus einer interpolierten Zeichenfolge:
Konvertierung einer interpolierten Zeichenfolge in eine String. Im folgenden Beispiel wird eine Zeichenfolge zurückgegeben, deren interpolierte Zeichenfolgenausdrücke durch ihre Zeichenfolgendarstellungen ersetzt wurden. Beispiel:
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>
Das ist das endgültige Ergebnis einer Zeichenfolgeninterpretation. Alle Vorkommen von doppelten geschweiften Klammern („{{“ oder „}}“) werden in einzelne geschweifte Klammern konvertiert.
Konvertierung einer interpolierten Zeichenfolge in eine IFormattable Variable, mit der Sie mehrere Ergebniszeichenfolgen mit kulturspezifischem Inhalt aus einer einzelnen IFormattable Instanz erstellen können. Dies ist nützlich, um beispielsweise die richtigen numerischen und Datumsformate für einzelne Kulturen einzubeziehen. Alle Vorkommen von doppelten geschweiften Klammern („{{“ oder „}}“) bleiben bestehen, bis Sie die Zeichenfolge formatieren, indem sie die Methode ToString() implizit oder explizit aufrufen. Alle enthaltenen Interpolationsausdrücke werden in {0}, {1} usw. konvertiert.
Im folgenden Beispiel wird Spiegelung verwendet, um die Elemente sowie die Feld- und Eigenschaftswerte einer IFormattable Variablen anzuzeigen, die aus einer interpolierten Zeichenfolge erstellt wird. Außerdem wird die IFormattable Variable an die Console.WriteLine(String) Methode übergeben.
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>
Beachten Sie, dass die interpolierte Zeichenfolge nur mithilfe von Spiegelung überprüft werden kann. Wenn es an eine Zeichenfolgenformatierungsmethode wie WriteLine(String) übergeben wird, werden die Formatelemente aufgelöst und die Ergebniszeichenfolge zurückgegeben.
Konvertierung einer interpolierten Zeichenfolge in eine FormattableString Variable, die eine zusammengesetzte Formatzeichenfolge darstellt. Wenn Sie die zusammengesetzte Formatzeichenfolge prüfen und wie sie als Ergebniszeichenfolge gerendert wird, könnte Ihnen das zum Beispiel helfen, sich vor einem Injektionsangriff zu schützen, wenn Sie eine Abfrage erstellen. Ein FormattableString umfasst außerdem:
- Eine Überladung von ToString(), die eine Ergebniszeichenfolge für das CurrentCulture-Element erzeugt.
- Eine Methode Invariant, die eine Zeichenfolge für InvariantCulture erstellt.
- Eine ToString(IFormatProvider) Methode, die eine Ergebniszeichenfolge für eine angegebene Kultur erzeugt.
Alle Vorkommen von doppelten geschweiften Klammern („{{“ oder „}}“) bleiben bestehen, bis Sie die Zeichenfolge formatieren. Alle enthaltenen Interpolationsausdrücke werden in {0}, {1} usw. konvertiert.
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!