Uso de la interpolación de cadenas para construir cadenas con formato
En este tutorial se muestra cómo usar la interpolación de cadenas para insertar valores en una cadena única. También aprenderá a controlar el formato de texto de la cadena de resultado. Se usa el explorador para escribir y ejecutar código de C# y se pueden ver al instante los resultados.
Crear una cadena interpolada
Ejecute el código siguiente en la ventana interactiva. Seleccione el botón Entrar en el modo de enfoque. A continuación, escriba el bloque de código siguiente en la ventana interactiva (reemplace <name>
por su nombre) y seleccione Ejecutar:
var name = "<name>";
Console.WriteLine($"Hello, {name}. It's a pleasure to meet you!");
Al ejecutar el código, Salida muestra una cadena que incluye su nombre en el saludo. El argumento de cadena de la llamada al método WriteLine es una expresión de cadena interpolada. Es un tipo de plantilla que permite construir una sola cadena (denominada cadena de resultado) a partir de una cadena que incluye código incrustado. Las expresiones de cadena interpoladas son especialmente útiles para insertar valores en una cadena o para concatenar (unir entre sí) varias cadenas.
El ejemplo anterior contiene los dos elementos que debe tener toda expresión de cadena interpolada:
Un literal de cadena que empieza con el carácter
$
antes del carácter de comillas de apertura. No puede haber ningún espacio entre el símbolo$
y el carácter de comillas. (Si quiere ver qué ocurre si incluye uno, inserte un espacio después del carácter$
en la ventana interactiva y ejecute el código actualizado. El compilador de C# notifica el error "Carácter '$' no esperado").Una o varias expresiones de interpolación. Una expresión de interpolación se indica mediante una llave de apertura y de cierre (
{
y}
). Puede colocar cualquier expresión de C# que devuelva un valor (incluidonull
) dentro de las llaves.
Probemos algunos ejemplos más de interpolación de cadenas con otros tipos de datos.
Incluir diferentes tipos de datos
En el paso anterior, se ha usado una interpolación de cadena para insertar una cadena dentro de otra. Sin embargo, cada expresión de interpolación que forma parte de una expresión de cadena interpolada puede ser de cualquier tipo de datos. Vamos a incluir valores de distintas expresiones de tipos de datos en una cadena interpolada.
En el siguiente ejemplo, primero definimos una tupla que tiene Name
, Price
y perPackage
miembros. Ejecute el código siguiente en la ventana interactiva:
var item = (Name: "eggplant", Price: 1.99m, perPackage: 3);
var date = DateTime.Now;
Console.WriteLine($"On {date}, the price of {item.Name} was {item.Price} per {item.perPackage} items.");
Observe que la expresión de interpolación item.Price
de la cadena interpolada se resuelve en el texto "1.99" en la cadena de resultado. Esto se debe a que, cuando el tipo del resultado de la expresión no es una cadena, el resultado se resuelve en una cadena de la siguiente manera:
Si la expresión de interpolación se evalúa en
null
, se usa una cadena vacía ("", o String.Empty).Si la expresión de interpolación no se evalúa en
null
, se suele llamar al métodoToString
de la expresión de resultado.
En el resultado de este ejemplo, la fecha es demasiado precisa (el precio de "eggplant" no varía por segundos) y el valor del precio no indica una unidad de moneda. En el paso siguiente se aprende a corregir esos problemas al controlar el formato de representaciones de cadena de los resultados de la expresión.
Control del formato de las expresiones de interpolación
En el paso anterior se han insertado en la cadena de resultado dos cadenas con formato incorrecto. Una era un valor de fecha y hora en la que solo la fecha era apropiada. La segunda era un precio que no indicaba su unidad de moneda. Ambos problemas se podían solucionar fácilmente. La interpolación de cadena permite especificar cadenas de formato que controlan el formato de tipos específicos. Modifique la llamada a Console.WriteLine
del ejemplo anterior para incluir las cadenas de formato para las expresiones de fecha y precio, como se muestra en la siguiente línea:
Console.WriteLine($"On {date:d}, the price of {item.Name} was {item.Price:C2} per {item.perPackage} items");
Especifique una cadena de formato al colocar dos puntos (":") después de la expresión de interpolación y la cadena de formato. "d" es una cadena de formato de fecha y hora estándar que representa el formato de fecha corta. "C2" es una cadena de formato numérica estándar que representa un número como un valor de moneda con dos dígitos después del separador decimal.
Una serie de tipos de las bibliotecas de .NET admiten un conjunto predefinido de cadenas de formato. Esto incluye todos los tipos numéricos y los tipos de fecha y hora. Para obtener una lista completa de los tipos que admiten cadenas de formato, vea Dar formato a cadenas y tipos de biblioteca de clase .NET en el artículo Aplicar formato a tipos de .NET.
Pruebe a modificar las cadenas de formato del ejemplo para ver cómo afectan al formato de fecha y hora y al valor numérico. Cambie "d" en {date:d}
a "t" (para mostrar el formato de hora corta), "y" (para mostrar el año y el mes) y "yyyy" (para mostrar el año como un número de cuatro dígitos). Cambie "C2" en {price:C2}
a "e" (para la notación exponencial) y "F3" (para un valor numérico con tres dígitos después del separador decimal).
Además de controlar el formato, también puede controlar el ancho de campo y la alineación de las cadenas con formato incluidas en la cadena de resultado. En el paso siguiente aprenderá a hacerlo.
Control el ancho de campo y la alineación de expresiones de interpolación
Normalmente, cuando el resultado de una expresión de cadena interpolada tiene formato de cadena, esa cadena se incluye en una cadena de resultado sin espacios iniciales ni finales. Especialmente cuando se trabaja con un conjunto de datos, poder controlar el ancho de un campo y la alineación del texto ayuda a generar una salida más legible. Para ver esto, ejecute el siguiente código:
var inventory = new Dictionary<string, int>()
{
["hammer, ball pein"] = 18,
["hammer, cross pein"] = 5,
["screwdriver, Phillips #2"] = 14
};
Console.WriteLine($"Inventory on {DateTime.Now:d}");
Console.WriteLine(" ");
Console.WriteLine($"|{"Item",-25}|{"Quantity",10}|");
foreach (var item in inventory)
Console.WriteLine($"|{item.Key,-25}|{item.Value,10}|");
Los nombres de elemento están alineados a la izquierda y sus cantidades están alineadas a la derecha. Para especificar la alineación, se agrega una coma (",") después de una expresión de interpolación y se designa el ancho de campo mínimo. Si el valor especificado es un número positivo, el campo se alinea a la derecha. Si es un número negativo, el campo se alinea a la izquierda.
Pruebe a quitar los signos negativos del código {"Item",-25}
e {item.Key,-25}
y vuelva a ejecutar el ejemplo. En esta ocasión, los nombres de elemento se alinean a la derecha.
Puede combinar un especificador de alineación y una cadena de formato en una única expresión de interpolación. Para ello, especifique primero la alineación, seguida de dos puntos y la cadena de formato. Pruebe el siguiente código que muestra tres cadenas con formato con anchos de campo definidos:
Console.WriteLine($"[{DateTime.Now,-20:d}] Hour [{DateTime.Now,-10:HH}] [{1063.342,15:N2}] feet");
¡Enhorabuena!
Ha completado el tutorial interactivo sobre interpolación de cadenas. Puede visitar el sitio .NET para descargar el SDK de .NET Core, crear un proyecto en el equipo y seguir programando.
Para más información, vea Interpolación de cadenas.
¿Tiene algún problema con esta sección? Si es así, envíenos sus comentarios para que podamos mejorarla.