Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Służy do konstruowania ciągów znaków. Ciąg interpolowany wygląda jak ciąg szablonu zawierający wyrażenia interpolowane. Ciąg interpolowany zwraca ciąg, który zastępuje wyrażenia interpolowane, które zawiera ich reprezentacje ciągów. Ta funkcja jest dostępna w visual basic 14 i nowszych wersjach.
Argumenty ciągu interpolowanego są łatwiejsze do zrozumienia niż ciąg formatu złożonego. Na przykład następujący ciąg interpolowany zawiera dwa wyrażenia interpolowane i {name}
{hours:hh}
:
Console.WriteLine($"Name = {name}, hours = {hours:hh}")
Równoważny ciąg formatu złożonego to:
Console.WriteLine("Name = {0}, hours = {1:hh}", name, hours)
Struktura ciągu interpolowanego to:
$"<text> {<interpolated-expression> [,<field-width>] [:<format-string>] } <text> ..."
Gdzie:
field-width
jest liczbą całkowitą ze znakiem wskazującą liczbę znaków w polu. Jeśli jest to dodatnie, pole jest wyrównane do prawej; jeśli ujemne, wyrównane do lewej.format-string
to ciąg formatu odpowiedni dla typu sformatowanego obiektu. Na przykład dla DateTime wartości może to być standardowy ciąg formatu daty i godziny , taki jak "D" lub "d".
Ważne
Nie można mieć żadnego odstępu między znakiem $
a "
, który rozpoczyna ciąg. Spowoduje to błąd kompilatora.
Możesz użyć ciągu interpolowanego w dowolnym miejscu, w którym można użyć zwykłego tekstu. Ciąg interpolowany jest obliczany za każdym razem, gdy kod z ciągiem interpolowanym jest wykonywany. Dzięki temu można oddzielić definicję i ocenę ciągu interpolowanego.
Aby uwzględnić nawias klamrowy ("{" lub "}") w ciągu interpolowanym, użyj dwóch nawiasów klamrowych, "{{" lub "}}". Aby uzyskać więcej informacji, zobacz Niejawne konwersje.
Jeśli ciąg interpolowany zawiera inne znaki ze specjalnym znaczeniem w ciągu interpolowanym, takim jak cudzysłów ("), dwukropek (:) lub przecinek (,), powinny one zostać uniknione, jeśli wystąpią w tekście literału. Lub jeśli są elementami języka zawartymi w wyrażeniu interpolowanym, powinny one być uwzględniane w wyrażeniu rozdzielonym nawiasami. Poniższy przykład umożliwia ucieczkę cudzysłowów w celu uwzględnienia ich w ciągu wynikowym:
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.
Niejawne przekształcenia
Istnieją trzy niejawne konwersje typów z ciągu interpolowanego:
Konwersja ciągu interpolowanego na String. Poniższy przykład zwraca łańcuch znaków, w którym wyrażenia interpolacyjne zostały zastąpione ich odpowiednimi reprezentacjami. Przykład:
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>
Jest to końcowy wynik interpretacji ciągu. Wszystkie wystąpienia podwójnych nawiasów klamrowych ("{{" i "}}") są konwertowane na pojedynczy nawias klamrowy.
Konwersja ciągu interpolowanego na zmienną IFormattable , która umożliwia tworzenie wielu ciągów wyników z zawartością specyficzną dla kultury z jednego IFormattable wystąpienia. Jest to przydatne w przypadku dołączania takich elementów jak poprawne formaty liczbowe i daty dla poszczególnych kultur. Wszystkie wystąpienia podwójnych nawiasów klamrowych ("{{" i "}}") pozostają jako podwójne nawiasy klamrowe, dopóki ciąg nie zostanie sformatowany jawnie lub niejawnie wywołując metodę ToString() . Wszystkie zawarte wyrażenia interpolacji są konwertowane na {0}, {1}i tak dalej.
W poniższym przykładzie użyto odbicia, aby wyświetlić elementy członkowskie, a także wartości IFormattable pól i właściwości zmiennej utworzonej na podstawie ciągu interpolowanego. Przekazuje również zmienną IFormattable do metody 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>
Należy pamiętać, że ciąg interpolowany można sprawdzić tylko przy użyciu odbicia. Jeśli zostanie przekazana do metody formatowania ciągów, takiej jak WriteLine(String), jej elementy formatu zostaną rozpoznane i zwrócony ciąg wynikowy.
Konwersja ciągu interpolowanego na zmienną FormattableString reprezentującą ciąg formatu złożonego. Inspekcja ciągu formatu złożonego i sposobu, w jaki jest renderowany jako ciąg wynikowy, może na przykład pomóc w ochronie przed atakiem typu injection, jeśli konstruujesz zapytanie. Również obejmuje FormattableString:
- ToString() Przeciążenie, które generuje ciąg wynikowy dla elementu CurrentCulture.
- Metoda Invariant , która tworzy ciąg dla elementu InvariantCulture.
- ToString(IFormatProvider) Metoda, która generuje ciąg wynikowy dla określonej kultury.
Wszystkie wystąpienia podwójnych nawiasów klamrowych ("{{" i "}}") pozostają jako podwójne nawiasy klamrowe do momentu sformatowania. Wszystkie zawarte wyrażenia interpolacji są konwertowane na {0}, {1}i tak dalej.
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!