Curiosidades C# – String Interpolation

O uso de chaves na formação de strings no C# existe desde a versão 1.0. A partir da versão 6, foi disponibilizada uma sintaxe alternativa para construir strings literais que contêm marcadores de posição para variáveis. Esta sintaxe tem o nome de String Interpolation (Interpolação de string)

Enquanto a saída é idêntica à formatação tradicional, esta abordagem permite ao programador colocar diretamente as variáveis dentro da string.

Tradicionalmente, para adicionarmos nossas variáveis a uma string usando chaves, usamos o método ‘string.Format‘ passando a string e os valores na ordem que forem apresentados.

Exemplo: classico

using System;
namespace StringInterpolation
{
    class Program
    {
        static void Main(string[] args)
        {
            var movieQuote = new MovieQuotes() { Movie = "The Dark Knight", Quote = "Why so serious?", Year = 2008 };
            var classicFormat = string.Format("Movie: {0}, says '{1}' in {2}", movieQuote.Movie, movieQuote.Quote, movieQuote.Year);
            Console.WriteLine(classicFormat);
        }
    }

    /// <summary>
    /// Just a sample class to make this sample better
    /// </summary>
    class MovieQuotes
    {
        public string Movie { get; set; }
        public string Quote { get; set; }
        public int Year { get; set; }

    }
}
/* This will print
Movie: The Dark Knight, says 'Why so serious?' in 2008
*/

String com interpolação

Para identificar a string interpolada devemos colocar o sinal de $ (cifrão) na sua declaração e as chaves são usadas para definir as posições das variáveis.

A grande vantagem dessa abordagem é que torna a leitura da string muito mais simples e linear, dado que não temos que ficar verificando qual informação preenche a lacuna indicada.

Outro ponto interessante com esta sintaxe é que as chaves usadas na interpolação foma um scopo valido, isso que dizer que podemos também realizar operações dentro deles.

Exemplo: Interpolado

using System;
using System.Collections.Generic;

namespace StringInterpolation
{
    class Program
    {
        static void Main(string[] args)
        {
            var movieQuote = new MovieQuotes() { Movie = "The Dark Knight", Quote = "Why so serious?", Year = 2008 };
            var interpolation01 = $"Movie: {movieQuote.Movie}, says '{movieQuote.Quote}' in {movieQuote.Year}";
            Console.WriteLine(interpolation01);

            // in string interpolation, you do not add semicolon inside the brackets
            var interpolation02 = $"Movie: {movieQuote.Movie}, says '{movieQuote.Quote}' in {movieQuote.Year.ToString().Substring(2, 2)}";
            Console.WriteLine(interpolation02);
            Console.WriteLine();

            var movieQuotes = new List<MovieQuotes>();
            movieQuotes.Add(new MovieQuotes() { Movie = "The Dark Knight", Quote = "Why so serious?", Year = 2008 });
            movieQuotes.Add(new MovieQuotes() { Movie = "Jerry Maguire", Quote = "Show me the money!", Year = 1996 });
            movieQuotes.Add(new MovieQuotes() { Movie = "The Sixth Sense", Quote = "I see dead people.", Year = 1999 });
            var count = 0;
            foreach (var movieQuoteItem in movieQuotes)
            {
                var interpolation = $"Movie {++count}: {movieQuoteItem.Movie}, says '{movieQuoteItem.Quote}' in {movieQuoteItem.Year}";
                Console.WriteLine(interpolation);
            }
        }
    }

    /// <summary>
    /// Just a sample class to make this sample better
    /// </summary>
    class MovieQuotes
    {
        public string Movie { get; set; }
        public string Quote { get; set; }
        public int Year { get; set; }

    }
}
/* This will print
Movie: The Dark Knight, says 'Why so serious?' in 2008
Movie: The Dark Knight, says 'Why so serious?' in 08

Movie 1: The Dark Knight, says 'Why so serious?' in 2008
Movie 2: Jerry Maguire, says 'Show me the money!' in 1996
Movie 3: The Sixth Sense, says 'I see dead people.' in 1999
 */

O desenvolvedor é livre para escolher a forma que mais lhe convêm, ambas são formas validas de escrita de strings, o único porto de observação é se a linguagem em que o código está sendo escrito é a versão 6 ou superior.

Nota: ainda podemos usar caracteres de escape dentro da string interpolada, para isso basta usar prefixo \ assim como usamos na string sem interpolação.

Qualquer dúvida ou dicas, entre em contato: leandrolt@gmail.com

Principais referências

– Livro: Pro C# 7: With .NET and .NET Core – Andrew Troelsen
– https://docs.microsoft.com/pt-br/dotnet/csharp/language-reference/tokens/interpolated
– https://docs.microsoft.com/pt-br/dotnet/csharp/tutorials/string-interpolation

Leave a Reply

Your email address will not be published. Required fields are marked *