Cadenas interpoladas (referencia de Visual Basic)Interpolated Strings (Visual Basic Reference)

Se utiliza para construir cadenas.Used to construct strings. Una cadena interpolada es similar a una cadena de plantilla que contiene expresiones interpoladas.An interpolated string looks like a template string that contains interpolated expressions. Una cadena interpolada devuelve una cadena que reemplaza a las expresiones interpoladas que contiene por sus representaciones de cadena.An interpolated string returns a string that replaces the interpolated expressions that it contains with their string representations. Esta característica está disponible en Visual Basic 14 y versiones posteriores.This feature is available in Visual Basic 14 and later versions.

Los argumentos de una cadena interpolada son más fáciles de entender que una cadena de formato compuesto.The arguments of an interpolated string are easier to understand than a composite format string. Por ejemplo, la cadena interpoladaFor example, the interpolated string

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

contiene dos expresiones interpoladas, "{name}" y "{hours:hh}".contains two interpolated expressions, '{name}' and '{hours:hh}'. La cadena de formato compuesto equivalente es esta:The equivalent composite format string is:

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

La estructura de una cadena interpolada es la siguiente:The structure of an interpolated string is:

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

donde:where:

  • field-width es un entero con signo que indica el número de caracteres del campo.field-width is a signed integer that indicates the number of characters in the field. Si es positivo, el campo está alineado a la derecha. Si es negativo, está alineado a la izquierda.If it is positive, the field is right-aligned; if negative, left-aligned.

  • format-string es una cadena de formato adecuada para el tipo de objeto al que se da formato.format-string is a format string appropriate for the type of object being formatted. Por ejemplo, para un valor DateTime, podría ser una cadena con formato de fecha y hora estándar , como "d" o "d".For example, for a DateTime value, it could be a standard date and time format string such as "D" or "d".

Importante

No puede haber ningún espacio en blanco entre el carácter $ y el carácter " que inicia la cadena.You cannot have any white space between the $ and the " that starts the string. Si lo hace, se producirá un error del compilador.Doing so causes a compiler error.

Puede utilizar una cadena interpolada en cualquier lugar que pueda utilizar un literal de cadena.You can use an interpolated string anywhere you can use a string literal. La cadena interpolada se evalúa cada vez que se ejecuta el código con la cadena interpolada.The interpolated string is evaluated each time the code with the interpolated string executes. Esto le permite separar la definición y la evaluación de una cadena interpolada.This allows you to separate the definition and evaluation of an interpolated string.

Para incluir una llave ("{" o "}") en una cadena interpolada, use dos llaves, "{{" o "}}".To include a curly brace ("{" or "}") in an interpolated string, use two curly braces, "{{" or "}}". Consulte la sección Conversiones implícitas para obtener más detalles.See the Implicit Conversions section for more details.

Si la cadena interpolada contiene otros caracteres con un significado especial en una cadena interpolada, como comillas dobles ("), dos puntos (:) o coma (,), deben incluirse entre caracteres de escape si aparecen en texto literal, o bien deben incluirse en una expresión delimitada por paréntesis si son elementos del lenguaje incluidos en una expresión 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. En el ejemplo siguiente las comillas se escriben entre caracteres de escape para incluirlas en la cadena de resultado y se usan paréntesis para delimitar la expresión (age == 1 ? "" : "s") de modo que el carácter de dos puntos no se interprete como el principio de una cadena 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>

Conversiones implícitasImplicit Conversions

Hay tres conversiones de tipo implícito de una cadena interpolada:There are three implicit type conversions from an interpolated string:

  1. Conversión de una cadena interpolada a String.Conversion of an interpolated string to a String. En el ejemplo siguiente se devuelve una cadena cuyas expresiones de cadena interpolada se han reemplazado por las representaciones de cadena.The following example returns a string whose interpolated string expressions have been replaced with their string representations. Por ejemplo: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>
    

    Este es el resultado final de una interpretación de cadena.This is the final result of a string interpretation. Todas las apariciones de llaves dobles ("{{" y "}}") se convierten en una única llave.All occurrences of double curly braces ("{{" and "}}") are converted to a single curly brace.

  2. Conversión de una cadena interpolada a una variable IFormattable que permite crear varias cadenas de resultado con contenido específico de la referencia cultural de una sola instancia 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. Esto resulta útil para incluir elementos como los formatos numéricos y de fecha correctos para cada referencia cultural.This is useful for including such things as the correct numeric and date formats for individual cultures. Todas las apariciones de llaves dobles ("{{" y "}}") permanecen como llaves dobles hasta que dé formato a la cadena mediante una llamada implícita o explícita al 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 las expresiones de interpolación contenidas se convierten en {0}, {1}, etc.All contained interpolation expressions are converted to {0}, {1}, and so on.

    En el ejemplo siguiente se usa la reflexión para mostrar los miembros y los valores de propiedad y campo de una variable IFormattable que se crea a partir de una cadena 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. También pasa la variable IFormattable al 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>
    
    

    Tenga en cuenta que la cadena interpolada solo se puede inspeccionar mediante reflexión.Note that the interpolated string can be inspected only by using reflection. Si se pasa a un método de formato de cadena, como WriteLine(String), sus elementos de formato se resuelven y se devuelve la cadena de resultado.If it is passed to a string formatting method, such as WriteLine(String), its format items are resolved and the result string returned.

  3. Conversión de una cadena interpolada a una variable FormattableString que representa una cadena de formato compuesto.Conversion of an interpolated string to a FormattableString variable that represents a composite format string. El hecho de inspeccionar la cadena de formato compuesto y la manera en que se presenta como cadena de resultado podría ayudarle a protegerse frente a un ataque por inyección si estuviese compilando una 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. Un FormattableString también incluye:A FormattableString also includes:

    Todas las apariciones de llaves dobles ("{{" y "}}") permanecen como llaves dobles hasta que dé formato.All occurrences of double curly braces ("{{" and "}}") remain as double curly braces until you format. Todas las expresiones de interpolación contenidas se convierten en {0}, {1}, etc.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!
    
    

Vea tambiénSee also