CSharp

Tutorial CSharp: Interpolación de Strings

Aprende la interpolación de strings en C# para crear cadenas dinámicas y legibles con ejemplos prácticos y comparativas con métodos tradicionales.

Aprende CSharp y certifícate

Concatenación tradicional

En C#, trabajar con cadenas de texto es una tarea fundamental en casi cualquier aplicación. La concatenación es el proceso de unir dos o más cadenas para formar una nueva. Antes de explorar métodos más modernos, es importante entender cómo se realiza la concatenación tradicional en C#.

La forma más básica de concatenar cadenas en C# es mediante el operador +. Este operador nos permite unir cadenas de manera sencilla y directa.

string nombre = "Ana";
string apellido = "García";
string nombreCompleto = nombre + " " + apellido;

Console.WriteLine(nombreCompleto); // Muestra: Ana García

Cuando necesitamos concatenar múltiples cadenas o combinar texto con valores de variables, el código puede volverse más extenso:

int edad = 28;
string ciudad = "Madrid";
string presentacion = "Me llamo " + nombre + " " + apellido + ", tengo " + edad + " años y vivo en " + ciudad + ".";

Console.WriteLine(presentacion); // Muestra: Me llamo Ana García, tengo 28 años y vivo en Madrid.

Para situaciones donde necesitamos concatenar muchas cadenas, C# ofrece la clase StringBuilder del espacio de nombres System.Text, que proporciona mejor rendimiento que el operador + para múltiples operaciones:

using System.Text;

StringBuilder sb = new StringBuilder();
sb.Append("Me llamo ");
sb.Append(nombre);
sb.Append(" ");
sb.Append(apellido);
sb.Append(", tengo ");
sb.Append(edad);
sb.Append(" años y vivo en ");
sb.Append(ciudad);
sb.Append(".");

string resultado = sb.ToString();
Console.WriteLine(resultado); // Muestra: Me llamo Ana García, tengo 28 años y vivo en Madrid.

Otra alternativa tradicional es el método String.Format(), que ofrece una sintaxis más limpia mediante marcadores de posición:

string mensaje = String.Format("Me llamo {0} {1}, tengo {2} años y vivo en {3}.", 
                              nombre, apellido, edad, ciudad);

Console.WriteLine(mensaje); // Muestra: Me llamo Ana García, tengo 28 años y vivo en Madrid.

Los marcadores de posición en String.Format() se indican con números entre llaves {0}, {1}, etc., que corresponden a la posición de los argumentos que se pasan al método. Esto hace que el código sea más legible y fácil de mantener.

También podemos dar formato a los valores durante la concatenación:

double precio = 19.99;
string producto = "camiseta";
string oferta = String.Format("La {0} cuesta {1:C} (IVA incluido)", producto, precio);

Console.WriteLine(oferta); // Muestra: La camiseta cuesta 19,99 € (IVA incluido)

El formato :C en {1:C} indica que queremos formatear el número como moneda, según la configuración regional del sistema.

Para casos donde necesitamos concatenar elementos de una colección, podemos usar el método String.Join():

string[] frutas = { "manzana", "naranja", "plátano", "fresa" };
string listaFrutas = String.Join(", ", frutas);

Console.WriteLine("Frutas disponibles: " + listaFrutas);
// Muestra: Frutas disponibles: manzana, naranja, plátano, fresa

La concatenación tradicional, aunque funcional, puede presentar algunos inconvenientes:

  • Legibilidad reducida: Con muchas variables, el código puede volverse difícil de leer.
  • Propenso a errores: Es fácil olvidar espacios o signos de puntuación.
  • Rendimiento: Concatenar muchas cadenas con el operador + crea múltiples objetos string intermedios.
// Ejemplo de código difícil de leer y mantener
string datosUsuario = "ID: " + id + "\nNombre: " + nombre + "\nApellido: " + apellido + 
                     "\nEdad: " + edad + "\nEmail: " + email + "\nTeléfono: " + telefono;

Para mejorar el rendimiento en bucles, es recomendable usar StringBuilder en lugar de concatenación con +:

// Enfoque ineficiente
string resultado = "";
for (int i = 0; i < 1000; i++)
{
    resultado += i.ToString() + ", ";
}

// Enfoque eficiente
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 1000; i++)
{
    sb.Append(i.ToString());
    sb.Append(", ");
}
resultado = sb.ToString();

La concatenación tradicional sigue siendo útil para casos simples, pero para escenarios más complejos o donde el rendimiento es crucial, es mejor considerar alternativas como StringBuilder o String.Format().

Interpolación con $

La interpolación de strings es una característica moderna de C# que simplifica enormemente la forma de crear cadenas que incluyen valores de variables. Introducida en C# 6.0, esta técnica ofrece una sintaxis más intuitiva y legible que los métodos tradicionales de concatenación.

Para utilizar la interpolación, simplemente se coloca el símbolo $ antes de la cadena y se incluyen las variables o expresiones directamente dentro de llaves {} en el texto.

string nombre = "Carlos";
int edad = 32;
string mensaje = $"Hola, me llamo {nombre} y tengo {edad} años.";

Console.WriteLine(mensaje); // Muestra: Hola, me llamo Carlos y tengo 32 años.

Esta sintaxis es mucho más clara y directa que la concatenación con el operador + o el uso de String.Format(). La interpolación nos permite ver exactamente cómo quedará el texto final, con las variables insertadas en su contexto.

Podemos incluir expresiones dentro de las llaves, no solo variables simples:

int a = 5;
int b = 7;
Console.WriteLine($"La suma de {a} y {b} es {a + b}"); // Muestra: La suma de 5 y 7 es 12
Console.WriteLine($"El doble de {a} es {a * 2}"); // Muestra: El doble de 5 es 10

También es posible aplicar formatos específicos a los valores interpolados, utilizando la sintaxis {expresión:formato}:

decimal precio = 123.45m;
DateTime fecha = new DateTime(2023, 10, 15);

// Formato de moneda
string etiqueta = $"Precio: {precio:C}";
Console.WriteLine(etiqueta); // Muestra: Precio: 123,45 €

// Formato de fecha
string fechaFormateada = $"Fecha de compra: {fecha:dd/MM/yyyy}";
Console.WriteLine(fechaFormateada); // Muestra: Fecha de compra: 15/10/2023

// Formato numérico con decimales específicos
double valor = 123.456789;
Console.WriteLine($"Valor redondeado: {valor:F2}"); // Muestra: Valor redondeado: 123,46

La interpolación permite alineación y relleno de valores, lo que resulta útil para crear tablas o listas formateadas:

string[] nombres = { "Ana", "Juan Carlos", "Beatriz" };
int[] edades = { 25, 42, 31 };

Console.WriteLine($"{"Nombre",-15}{"Edad",5}");
Console.WriteLine(new string('-', 20));

for (int i = 0; i < nombres.Length; i++)
{
    Console.WriteLine($"{nombres[i],-15}{edades[i],5}");
}

// Resultado:
// Nombre           Edad
// --------------------
// Ana                25
// Juan Carlos        42
// Beatriz            31

En este ejemplo, el número después de la coma indica el ancho del campo. Un valor negativo alinea a la izquierda, mientras que un valor positivo alinea a la derecha.

La interpolación también funciona perfectamente con strings multilínea utilizando la sintaxis de verbatim strings (@):

string nombre = "Elena";
string profesion = "ingeniera";
int experiencia = 8;

string perfil = $@"
Perfil Profesional:
------------------
Nombre: {nombre}
Profesión: {profesion}
Años de experiencia: {experiencia}
";

Console.WriteLine(perfil);

Podemos combinar la interpolación con operadores condicionales para crear strings más dinámicos:

int puntuacion = 85;
string resultado = $"Has obtenido {puntuacion} puntos, {(puntuacion >= 70 ? "¡aprobado!" : "suspenso.")}";

Console.WriteLine(resultado); // Muestra: Has obtenido 85 puntos, ¡aprobado!

Para incluir las llaves literales {} en una cadena interpolada, simplemente se duplican:

string codigo = "C#";
string ejemplo = $"El código {{variable}} en {codigo} se escribe entre llaves.";

Console.WriteLine(ejemplo); // Muestra: El código {variable} en C# se escribe entre llaves.

La interpolación de strings también es compatible con la localización y puede utilizarse con IFormattable para crear cadenas que se formateen según la configuración regional:

double precio = 1234.56;
var fechaHoy = DateTime.Now;

// Crear una cadena formatable que respete la configuración regional
FormattableString mensaje = $"Precio: {precio:C} - Fecha: {fechaHoy:D}";

// Mostrar con la configuración regional actual
Console.WriteLine(mensaje.ToString()); 

// Mostrar con configuración regional específica (inglés de EE.UU.)
Console.WriteLine(mensaje.ToString(new System.Globalization.CultureInfo("en-US")));

Las ventajas principales de la interpolación de strings son:

  • Legibilidad mejorada: El código es más intuitivo y fácil de entender.
  • Menos errores: No hay que preocuparse por el orden de los parámetros como en String.Format().
  • Mantenimiento simplificado: Es más sencillo modificar el texto y ver cómo afecta al resultado final.
  • Expresividad: Permite incluir expresiones complejas directamente en la cadena.
// Comparación de métodos para crear la misma cadena:

// 1. Concatenación tradicional
string mensaje1 = "El producto " + nombreProducto + " cuesta " + precio + "€ con un " + 
                 descuento + "% de descuento. Precio final: " + precioFinal + "€";

// 2. String.Format
string mensaje2 = String.Format("El producto {0} cuesta {1}€ con un {2}% de descuento. Precio final: {3}€", 
                               nombreProducto, precio, descuento, precioFinal);

// 3. Interpolación de strings
string mensaje3 = $"El producto {nombreProducto} cuesta {precio}€ con un {descuento}% de descuento. Precio final: {precioFinal}€";

La interpolación de strings es especialmente útil en escenarios de desarrollo web donde se necesita generar HTML dinámico:

string usuario = "maria_lopez";
int notificaciones = 5;
string html = $@"
<div class='user-panel'>
    <span class='welcome'>Bienvenida, {usuario}</span>
    <span class='notifications'>Tienes {notificaciones} {(notificaciones == 1 ? "notificación" : "notificaciones")} pendientes</span>
</div>";

En resumen, la interpolación con $ representa una evolución significativa en la forma de trabajar con cadenas en C#, ofreciendo una sintaxis más natural y expresiva que las alternativas tradicionales. Esta característica ha sido ampliamente adoptada por la comunidad de desarrolladores debido a su simplicidad y potencia.

Aprende CSharp online

Otras lecciones de CSharp

Accede a todas las lecciones de CSharp y aprende con ejemplos prácticos de código y ejercicios de programación con IDE web sin instalar nada.

Introducción A C#

Introducción Y Entorno

Creación De Proyecto C#

Introducción Y Entorno

Variables Y Constantes

Sintaxis

Tipos De Datos

Sintaxis

Operadores

Sintaxis

Control De Flujo

Sintaxis

Funciones

Sintaxis

Estructuras De Control Iterativo

Sintaxis

Interpolación De Strings

Sintaxis

Estructuras De Control Condicional

Sintaxis

Manejo De Valores Nulos

Sintaxis

Clases Y Encapsulación

Programación Orientada A Objetos

Objetos

Programación Orientada A Objetos

Constructores Y Destructores

Programación Orientada A Objetos

Herencia

Programación Orientada A Objetos

Polimorfismo

Programación Orientada A Objetos

Genéricos

Programación Orientada A Objetos

Métodos Virtuales Y Sobrecarga

Programación Orientada A Objetos

Clases Abstractas

Programación Orientada A Objetos

Interfaces

Programación Orientada A Objetos

Propiedades Y Encapsulación

Programación Orientada A Objetos

Métodos De Extensión

Programación Orientada A Objetos

Clases Y Objetos

Programación Orientada A Objetos

Clases Parciales

Programación Orientada A Objetos

Miembros Estáticos

Programación Orientada A Objetos

Tuplas Y Tipos Anónimos

Programación Orientada A Objetos

Arrays Y Listas

Colecciones Y Linq

Diccionarios

Colecciones Y Linq

Conjuntos, Colas Y Pilas

Colecciones Y Linq

Uso De Consultas Linq

Colecciones Y Linq

Linq Avanzado

Colecciones Y Linq

Colas Y Pilas

Colecciones Y Linq

Conjuntos

Colecciones Y Linq

Linq Básico

Colecciones Y Linq

Delegados Funcionales

Programación Funcional

Records

Programación Funcional

Expresiones Lambda

Programación Funcional

Linq Funcional

Programación Funcional

Fundamentos De La Programación Funcional

Programación Funcional

Pattern Matching

Programación Funcional

Testing Unitario Con Xunit

Testing

Excepciones

Excepciones

Delegados

Programación Asíncrona

Eventos

Programación Asíncrona

Lambdas

Programación Asíncrona

Uso De Async Y Await

Programación Asíncrona

Tareas

Programación Asíncrona

Accede GRATIS a CSharp y certifícate

Ejercicios de programación de CSharp

Evalúa tus conocimientos de esta lección Interpolación de Strings con nuestros retos de programación de tipo Test, Puzzle, Código y Proyecto con VSCode, guiados por IA.

En esta lección

Objetivos de aprendizaje de esta lección

  • Comprender la concatenación tradicional de cadenas en C# usando el operador + y String.Format().
  • Conocer el uso de StringBuilder para mejorar el rendimiento en concatenaciones múltiples.
  • Aprender la sintaxis y ventajas de la interpolación de strings con el símbolo $.
  • Aplicar formatos, expresiones y alineaciones dentro de cadenas interpoladas.
  • Identificar escenarios donde la interpolación mejora la legibilidad y mantenimiento del código.