Cadeias de caracteres interpoladas (referência do Visual Basic)Interpolated Strings (Visual Basic Reference)

Usado para construir cadeias de caracteres.Used to construct strings. Uma cadeia de caracteres interpolada é semelhante a uma cadeia de caracteres de modelo que contém expressões interpoladas.An interpolated string looks like a template string that contains interpolated expressions. 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.An interpolated string returns a string that replaces the interpolated expressions that it contains with their string representations. Esse recurso está disponível no Visual Basic 14 e versões posteriores.This feature is available in Visual Basic 14 and later versions.

Os argumentos de uma cadeia de caracteres interpolada são mais fáceis de entender do que uma cadeia de caracteres de formato composto.The arguments of an interpolated string are easier to understand than a composite format string. Por exemplo, a cadeia de caracteres interpoladaFor example, the interpolated string

Console.WriteLine($"Name = {name}, hours = {hours:hh}")

contém duas expressões interpoladas, "{name}" e "{hours:hh}".contains two interpolated expressions, '{name}' and '{hours:hh}'. A cadeia de caracteres de formato composto equivalente é:The equivalent composite format string is:

Console.WriteLine("Name = {0}, hours = {1:hh}", name, hours);

A estrutura de uma cadeia de caracteres interpolada é:The structure of an interpolated string is:

$"<text> {<interpolated-expression> [,<field-width>] [:<format-string>] } <text> ..."

em que:where:

  • field-width é um inteiro com sinal que indica o número de caracteres no campo.field-width is a signed integer that indicates the number of characters in the field. Se ele for positivo, o campo será alinhado à direita. Se for negativo, será alinhado à esquerda.If it is positive, the field is right-aligned; if negative, left-aligned.

  • format-string é uma cadeia de caracteres de formato apropriada para o tipo do objeto que está sendo formatado.format-string is a format string appropriate for the type of object being formatted. Por exemplo, para um DateTime valor, ele poderia ser um cadeia de caracteres de formato de data e hora padrão como "D" ou "d".For example, for a DateTime value, it could be a standard date and time format string such as "D" or "d".

Importante

Você não pode ter nenhum espaço em branco entre o $ e " que iniciam a cadeia de caracteres.You cannot have any white space between the $ and the " that starts the string. Fazer isso causa um erro do compilador.Doing so causes a compiler error.

Você pode usar uma cadeia de caracteres interpolada em qualquer lugar em que pode usar um literal de cadeia de caracteres.You can use an interpolated string anywhere you can use a string literal. A cadeia de caracteres interpolada é avaliada sempre que o código com a cadeia de caracteres interpolada for executado.The interpolated string is evaluated each time the code with the interpolated string executes. Isso permite que você separe a definição e a avaliação de uma cadeia de caracteres interpolada.This allows you to separate the definition and evaluation of an interpolated string.

Para incluir uma chave ("{" ou "}") em uma cadeia de caracteres interpolada, use duas chaves, "{{" ou "}}".To include a curly brace ("{" or "}") in an interpolated string, use two curly braces, "{{" or "}}". Consulte a seção sobre Conversões implícitas para obter mais detalhes.See the Implicit Conversions section for more details.

Se a cadeia de caracteres interpolada contiver outros caracteres com significado especial em uma cadeia de caracteres interpolada, como aspas ("), dois-pontos (:) ou vírgulas (,), eles devem ser substituídos se ocorrerem no 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.If the interpolated string contains other characters with special meaning in an interpolated string, such as the quotation mark ("), colon (:), or comma (,), they should be escaped if they occur in literal text, or they should be included in an expression delimited by parentheses if they are language elements included in an interpolated expression. O exemplo a seguir ignora as aspas para incluí-las na cadeia de caracteres de resultado e usa parênteses para delimitar a expressão (age == 1 ? "" : "s"), de modo que os dois-pontos não sejam interpretados como o início de uma cadeia de caracteres de formato.The following example escapes quotation marks to include them in the result string, and it uses parentheses to delimit the expression (age == 1 ? "" : "s") so that the colon is not interpreted as beginning a format string.

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.
' </Snippet1>

Conversões implícitasImplicit Conversions

Há três conversões de tipo implícitas de uma cadeia de caracteres interpolada:There are three implicit type conversions from an interpolated string:

  1. Conversão de uma cadeia de caracteres interpolada em um String.Conversion of an interpolated string to a String. O exemplo a seguir retorna uma cadeia de caracteres cujas expressões de cadeia de caracteres interpolada foram substituídas por suas representações de cadeia de caracteres.The following example returns a string whose interpolated string expressions have been replaced with their string representations. Por exemplo:For example:

    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>
    

    Esse é o resultado final de uma interpretação de cadeia de caracteres.This is the final result of a string interpretation. Todas as ocorrências de chaves duplas ("{{" e "}}") serão convertidas em uma chave única.All occurrences of double curly braces ("{{" and "}}") are converted to a single curly brace.

  2. Conversão de uma cadeia de caracteres interpolada em uma variável IFormattable que permite criar várias cadeias de caracteres de resultado com conteúdo específico da cultura de uma única instância IFormattable.Conversion of an interpolated string to an IFormattable variable that allows you create multiple result strings with culture-specific content from a single IFormattable instance. Isso é útil para incluir itens como os formatos de número e data corretos para culturas individuais.This is useful for including such things as the correct numeric and date formats for individual cultures. Todas as ocorrências de chaves duplas ("{{" e "}}") permanecem como chaves duplas até que você formate a cadeia de caracteres explícita ou implicitamente chamando o método ToString().All occurrences of double curly braces ("{{" and "}}") remain as double curly braces until you format the string by explicitly or implicitly calling the ToString() method. Todas as expressões de interpolação contidas são convertidas em {0}, {1}e assim por diante.All contained interpolation expressions are converted to {0}, {1}, and so on.

    O exemplo a seguir usa reflexão para exibir os membros, bem como os valores de campo e propriedade de uma variável IFormattable criada de uma cadeia de caracteres interpolada.The following example uses reflection to display the members as well as the field and property values of an IFormattable variable that is created from an interpolated string. Ele também passa a variável IFormattable para o método Console.WriteLine(String).It also passes the IFormattable variable to the Console.WriteLine(String) method.

    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 a reflexão.Note that the interpolated string can be inspected only by using reflection. Se ela for passada 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 será retornada.If it is passed to a string formatting method, such as WriteLine(String), its format items are resolved and the result string returned.

  3. Conversão de uma cadeia de caracteres interpolada uma FormattableString variável que representa uma cadeia de caracteres de formato composto.Conversion of an interpolated string to a FormattableString variable that represents a composite format string. Inspecionar a cadeia de caracteres de formato composto e como ela é renderizada como uma cadeia de caracteres de resultado pode, por exemplo, ajudar a proteger contra um ataque de injeção se você estiver criando uma consulta.Inspecting the composite format string and how it renders as a result string might, for example, help you protect against an injection attack if you were building a query. Um FormattableString também inclui:A FormattableString also includes:

    Todas as ocorrências de chaves duplas ("{{" e "}}") permanecem como chaves duplas até você formatar.All occurrences of double curly braces ("{{" and "}}") remain as double curly braces until you format. Todas as expressões de interpolação contidas são convertidas em {0}, {1}e assim por diante.All contained interpolation expressions are converted to {0}, {1}, and so on.

    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!
    
    

Consulte tambémSee also