CodeGym /Cursos /C# SELF /Interpolação de strings avançada

Interpolação de strings avançada

C# SELF
Nível 9 , Lição 2
Disponível

1. Relembrando interpolação de strings

Muitas vezes a gente precisa não só mostrar uma string, mas também inserir nela valores de variáveis. Antes, pra isso, usávamos concatenação (+) ou o método string.Format. Mas desde que apareceu a mágica da interpolação de strings (string interpolation) no C#, a vida ficou bem melhor.

Como funciona a interpolação de strings

Coloca o símbolo $ antes da string e, dentro dela, usa chaves {} pra inserir variáveis ou até expressões inteiras.

Comparando o jeito antigo e o novo de mostrar variáveis

string name = "Anna";
int age = 24;

Console.WriteLine("Meu nome é " + name + ", tenho " + age + " anos."); // Jeito antigo
Console.WriteLine($"Meu nome é {name}, tenho {age} anos."); // Jeito novo!

Dá pra inserir direto cálculos e expressões:


int a = 5, b = 10;
Console.WriteLine($"Soma {a} + {b} = {a + b}");

2. Como funciona a interpolação de strings

Coloca $ antes da string e as variáveis ou expressões vão entre chaves {}:


string name = "Anna";
int age = 24;

Console.WriteLine($"Meu nome é {name}, tenho {age} anos.");
  • Tudo que está fora das chaves é só texto.
  • Tudo que está dentro das chaves é interpretado como código C#: pode ser nome de variável, conta, chamada de método, etc.

Cálculos e expressões direto na string

Interpolação não fica só nas variáveis simples! Olha o que dá pra fazer:

Expressões aritméticas
int apples = 7;
int pears = 5;
Console.WriteLine($"Eu tenho {apples + pears} frutas no total."); // 12
Operações com strings e métodos
string city = "Budapeste";
Console.WriteLine($"Cidade em maiúsculo: {city.ToUpper()}"); // BUDAPESTE
Operador ternário, condições
int score = 90;
Console.WriteLine($"Nota: {(score >= 60 ? "aprovado" : "reprovado")}");
Chamadas de métodos
string FormatUser(string name, int age) => $"{name} ({age})";
Console.WriteLine($"Usuário: {FormatUser("Eva", 19)}"); // Usuário: Eva (19)
Trabalhando com arrays e coleções
int[] numbers = { 3, 5, 7 };
Console.WriteLine($"Soma: {numbers.Sum()}");
Console.WriteLine($"Elementos: {string.Join(", ", numbers)}");
Expressões aninhadas e construções complexas
var user = new { Name = "Oleg", Role = "Admin" };
Console.WriteLine($"Nome: {user.Name}, papel: {(user.Role == "Admin" ? "administrador" : "usuário")}");
Fica ligado:

as expressões dentro das chaves devem ser curtas e fáceis de ler. Se a lógica for complicada, melhor calcular antes e só colocar a variável pronta.

Expressões multinível
var student = new { Name = "Sasha", Info = new { Age = 21, Uni = "Harvard" } };
Console.WriteLine($"Nome: {student.Name}, universidade: {student.Info.Uni}");
Conversão de tipos na hora
double price = 19.99;
int count = 3;
Console.WriteLine($"Preço total: {price * count} euros");
Data e hora — já formatado
DateTime now = DateTime.Now;
Console.WriteLine($"Hoje: {now.Day}.{now.Month}.{now.Year}");
Exemplo com loop
var days = new[] { "Seg", "Ter", "Qua" };
Console.WriteLine($"Dias da semana: {string.Join(", ", days)}");

3. Formatação dentro da interpolação

Muitas vezes é importante mostrar bonito números, datas, moeda ou porcentagem.
A interpolação permite indicar o formato direto nas chaves — depois de dois pontos.

Sintaxe geral: {expressão:formato}

Formatando números

double num = 1234.5678;
Console.WriteLine($"Arredondado: {num:F2}");     // 1234.57
Console.WriteLine($"Forma exponencial: {num:E1}"); // 1.2E+003
Console.WriteLine($"Com separador de milhar: {num:N}"); // 1 234,57 (depende da cultura)

Exemplos de formatos:

  • F2 — duas casas decimais
  • N0 — separador de milhar, 0 casas decimais
  • E1 — notação exponencial, 1 casa decimal
  • P0 — porcentagem, 0 casas decimais
double ratio = 0.1234;
Console.WriteLine($"Porcentagem: {ratio:P1}"); // 12,3 %

Formatando datas

DateTime d = new DateTime(2025, 6, 18, 15, 42, 0);
Console.WriteLine($"Data: {d:dd.MM.yyyy}");         // 18.06.2025
Console.WriteLine($"Hora: {d:HH:mm}");             // 15:42
Console.WriteLine($"ISO: {d:yyyy-MM-ddTHH:mm:ss}"); // 2025-06-18T15:42:00

Resumo dos formatos de data:

  • dd — dia (2 dígitos)
  • MM — mês
  • yyyy — ano
  • HH:mm — hora:minuto (24h)
  • d — data curta conforme cultura
  • D — data longa

Formatando moeda e dinheiro

decimal cost = 2999.5m;
Console.WriteLine($"Preço: {cost:C}"); // 2,999.50 $  (depende da cultura)

Alinhamento e preenchimento

Dá pra definir largura do campo, alinhar à direita ou à esquerda:

int val = 7;
Console.WriteLine($"[{val,5}]");  // [    7] — à direita
Console.WriteLine($"[{val,-5}]"); // [7    ] — à esquerda

Combinando formatos

DateTime dt = DateTime.Now;
Console.WriteLine($"Hoje é {dt:dddd, dd MMMM yyyy}, hora {dt:HH:mm}");

Interpolação com tipos de dados diferentes

bool ok = true;
Console.WriteLine($"Operação {(ok ? "sucesso" : "erro")}");

Strings multilinha com interpolação

Agora também tem raw string literals e strings interpoladas multilinha:

string user = "Timur";
int score = 100;

Console.WriteLine($"""
    Parabéns, {user}!
    Seu resultado: {score}
    """);

Interpolação aninhada e cálculos

Dá pra chamar métodos, formatar o resultado e inserir na string:

double[] temps = { 23.4, 25.1, 21.9 };
Console.WriteLine($"Temperatura média: {temps.Average():F1}°C");

Exemplo com tabela (alinhamento + formato)

Formatação e alinhamento em tabela usando interpolação

double[] prices = { 123.4, 8.9, 5643.0 };
for (int i = 0; i < prices.Length; i++)
    Console.WriteLine($"Produto {i + 1}: {prices[i],10:F2} euros");

Resultado:

Produto 1:    123.40 euros
Produto 2:      8.90 euros
Produto 3:   5643.00 euros

4. Escape e interpolação juntos

Dá pra usar caracteres de escape e interpolação ao mesmo tempo:

string user = "Masha";
Console.WriteLine($"Oi, \"{user}\"!\nPrazer em te conhecer.");

Saída:

Oi, "Masha"!
Prazer em te conhecer.

Se juntar isso com strings literais, é só colocar $ antes, depois @ (pode ser ao contrário também — tanto faz):

string path = "C:\\Temp";
Console.WriteLine($@"Arquivo encontrado no caminho: ""{path}""");
Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION