Strings interpoladas (referência do Visual Basic)
Usado para construir strings. Uma cadeia de caracteres interpolada se parece com uma cadeia de caracteres de modelo que contém expressões interpoladas. Uma cadeia de caracteres interpolada retorna uma cadeia de caracteres que substitui as expressões interpoladas que ela contém por suas representações de cadeia de caracteres. Esse recurso está disponível no Visual Basic 14 e versões posteriores.
Os argumentos de uma cadeia de caracteres interpolada são mais fáceis de entender do que uma cadeia de caracteres de formato composto. Por exemplo, a cadeia de caracteres interpolada
Console.WriteLine($"Name = {name}, hours = {hours:hh}")
contém duas expressões interpoladas, '{name}' e '{hours:hh}'. A cadeia de caracteres de formato composto equivalente é:
Console.WriteLine("Name = {0}, hours = {1:hh}", name, hours)
A estrutura de uma cadeia interpolada é:
$"<text> {<interpolated-expression> [,<field-width>] [:<format-string>] } <text> ..."
onde:
field-width é um inteiro assinado que indica o número de caracteres no campo. Se for positivo, o campo está alinhado à direita; se negativo, alinhado à esquerda.
format-string é uma cadeia de caracteres de formato apropriada para o tipo de objeto que está sendo formatado. Por exemplo, para um DateTime valor, pode ser uma cadeia de caracteres de formato de data e hora padrão, como "D" ou "d".
Importante
Não é possível ter nenhum espaço em branco entre o $
e o "
que inicia a cadeia de caracteres. Fazer isso causa um erro de compilador.
Você pode usar uma string interpolada em qualquer lugar que você possa usar uma string literal. A string interpolada é avaliada cada vez que o código com a string interpolada é executado. Isso permite separar a definição e a avaliação de uma cadeia de caracteres interpolada.
Para incluir uma cinta encaracolada ("{" ou "}") em uma cadeia interpolada, use duas chaves encaracoladas, "{{" ou "}}". Consulte a seção Conversões implícitas para obter mais detalhes.
Se a cadeia interpolada contiver outros caracteres com significado especial em uma cadeia interpolada, como as aspas ("), dois pontos (:) ou vírgula (,), eles devem ser escapados se ocorrerem em texto literal, ou devem ser incluídos em uma expressão delimitada por parênteses se forem elementos de linguagem incluídos em uma expressão interpolada. O exemplo a seguir escapa das aspas para incluí-las na cadeia de caracteres de resultado:
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.
Conversões implícitas
Há três conversões de tipo implícitas de uma cadeia de caracteres interpolada:
Conversão de uma cadeia de caracteres interpolada em .String O exemplo a seguir retorna uma cadeia de caracteres cujas expressões de cadeia de caracteres interpoladas foram substituídas por suas representações de cadeia de caracteres. Por exemplo:
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>
Este é o resultado final de uma interpretação de cordas. Todas as ocorrências de chaves duplas ("{{" e "}}") são convertidas em uma única cinta encaracolada.
Conversão de uma cadeia de caracteres interpolada em uma IFormattable variável que permite criar várias cadeias de resultados com conteúdo específico da cultura a partir de uma única IFormattable instância. Isso é útil para incluir coisas como os formatos numéricos e de data corretos para culturas individuais. Todas as ocorrências de chaves duplas ("{{" e "}}") permanecem como chaves duplas até que você formate a cadeia de caracteres chamando explícita ou implicitamente o ToString() método. Todas as expressões de interpolação contidas são convertidas em {0}, {1}e assim por diante.
O exemplo a seguir usa reflexão para exibir os membros, bem como os valores de campo e propriedade de uma IFormattable variável que é criada a partir de uma cadeia de caracteres interpolada. Ele também passa a IFormattable variável para o Console.WriteLine(String) método.
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>
Observe que a cadeia de caracteres interpolada pode ser inspecionada somente usando reflexão. Se ele for passado para um método de formatação de cadeia de caracteres, como WriteLine(String), seus itens de formato serão resolvidos e a cadeia de caracteres de resultado retornada.
Conversão de uma cadeia de caracteres interpolada em uma FormattableString variável que representa uma cadeia de caracteres de formato composto. Inspecionar a cadeia de caracteres de formato composto e como ela é renderizada como uma cadeia de caracteres de resultado pode, por exemplo, ajudá-lo a se proteger contra um ataque de injeção se você estiver criando uma consulta. A FormattableString também inclui:
Uma ToString() sobrecarga que produz uma cadeia de caracteres de resultado para o CurrentCulture.
Um Invariant método que produz uma cadeia de caracteres para o InvariantCulture.
Um ToString(IFormatProvider) método que produz uma cadeia de caracteres de resultado para uma cultura especificada.
Todas as ocorrências de chaves duplas ("{{" e "}}") permanecem como chaves duplas até que você formate. Todas as expressões de interpolação contidas são convertidas em {0}, {1}e assim por diante.
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!