97 - Interpolación de string en C# con el modificador $


Hay una segunda forma de generar un string evitando utilizar sucesivas concatenaciones con el operador +, esto se logra con la interpolación de string.

Veamos con un simple ejemplo cual es la sintaxis para definir cadenas que pueden sustituir variables y expresiones.

Problema

Ingresar por teclado dos enteros, calcular su suma y luego mostrar un mensaje de los dos valores ingresados y su suma.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Interpolacion1
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.Write("Ingrese primer valor:");
            int valor1 = int.Parse(Console.ReadLine());
            Console.Write("Ingrese segundo valor:");
            int valor2 = int.Parse(Console.ReadLine());
            int suma = valor1 + valor2;
            Console.WriteLine($"La suma de {valor1} + {valor2} es {suma}");
            Console.ReadKey();
        }
    }
}

Al ejecutar el programa tenemos una salida similar a:

C# interpolación de strings

La interpolación de un string requiere que le antecedamos el caracter $ previo a las comillas dobles del string (no puede haber espacios en blanco entre la comilla y el caracter $):

            Console.WriteLine($"La suma de {valor1} + {valor2} es {suma}");

Luego todos aquellas variables y expresiones que se encuentran encerradas entre las llaves serán sustituidas por sus valores.

Recordemos que hasta ahora resolvíamos este tipo de problemas mediante la concatenación:

            Console.WriteLine("La suma de " + valor1 + " + " + valor2 + " es " + suma);

Como vemos la sintaxis es mucho más legible empleando la interpolación de string en lugar de la concatenación.

Por ejemplo si no queremos que quede almacenada la suma de los dos valores en una variable podemos directamente en la interpolación del string disponer la siguiente expresión:

            Console.WriteLine($"La suma de {valor1} + {valor2} es {valor1 + valor2}");

Es decir C# primero efectúa la suma de las variables 'valor1' y 'valor2' y dicho resultado se sustituye en el string.

Llamada a métodos.

Dentro de un string con interpolación podemos llamar a un método, siempre y cuando retorne un valor:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Interpolacion2
{
    class Program
    {

        public static int Mayor(int v1,int v2)
        {
            if (v1 > v2)
                return v1;
            else
                return v2;
        }

        static void Main(string[] args)
        {
            Console.Write("Ingrese primer valor:");
            int valor1 = int.Parse(Console.ReadLine());
            Console.Write("Ingrese segundo valor:");
            int valor2 = int.Parse(Console.ReadLine());
            Console.WriteLine($"El mayor entre {valor1} y {valor2} es {Mayor(valor1,valor2)}");
            Console.ReadKey();
        }
    }
}

Dentro de las llaves llamamos al método 'Mayor':

            Console.WriteLine($"El mayor entre {valor1} y {valor2} es {Mayor(valor1,valor2)}");

Alineación.

Cuando se produce la interpolación de variables y expresiones podemos indicar la alineación del resultado a izquierda o derecha.

Problema

Almacenar en dos vectores los nombres de 3 alumnos y sus notas. Imprimir los datos de los nombres alineados a izquierda y las notas alineadas a derecha.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Interpolacion3
{
    class Program
    {
        static void Main(string[] args)
        {
            string[] alumnos = {"juan", "mariana", "pedro"};
            int[] notas = {10 ,7, 5};
            for(int f=0;f<alumnos.Length;f++)
                Console.WriteLine($"{alumnos[f],-20} {notas[f],2}");
            Console.ReadKey();
        }
    }
}

Al ejecutar el programa tenemos una salida similar a:

C# interpolación de strings alineación

Mediante un valor negativo indicamos que la alineación es a la izquierda y el valor indica cuanto espacio se reserva:

 {alumnos[f],-20}

Luego para la alineación a derecha debemos indicar un valor positivo:

{notas[f],2}

Formato de string.

Según el tipo de dato podemos especificar un formato al dato que se interpolará.

La estructura completa cuando especificamos entre llaves la variable o expresión a sustituir es:

{<variable o expresión>[,<alineación>][:<formato del string>]}

Tanto la alineación como el formato de string son parámetros opcionales.

Veamos algunos ejemplos donde damos formatos a distintos tipos de datos:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Interpolacion4
{
    class Program
    {
        static void Main(string[] args)
        {
            DateTime fecha = DateTime.Now;
            Console.WriteLine($"La fecha y hora actual es {fecha:dd MM yyyy HH:mm:ss}");
            double precio = 10.252;
            Console.WriteLine($"La variable precio {precio:.##} con 2 decimales");
            Console.WriteLine($"La variable precio {precio:E} con formato exponencial");
            byte color = 255;
            Console.WriteLine($"La variable color {color:X} con formato exadecimal");
            Console.ReadKey();
        }
    }
}

Al ejecutar el programa tenemos una salida similar a:

C# interpolación formato de string

Como vemos debemos indicar luego de los dos puntos el formato a aplicar a la variable o expresión, por ejemplo para mostrar el valor en formato hexadecimal debemos disponer el caracter 'X':

            Console.WriteLine($"La variable color {color:X} con formato exadecimal");

Puede consultar distintos valores para el formateo de string según el tipo de datos aquí.


Retornar