Usar interpolação de cadeia de caracteres para construir cadeia de caracteres formatadas
Este tutorial ensina como usar a interpolação de cadeias de caracteres para inserir valores em uma única cadeia de caracteres. Você também aprenderá a controlar a formatação de texto da cadeia de caracteres do resultado. Use o navegador para escrever e executar código C# e os resultados poderão ser vistos imediatamente.
Criar uma cadeia de caracteres interpolada
Execute o seguinte código na janela interativa. Selecione o botão Entrar em modo de foco. Em seguida, digite o seguinte bloco de código na janela interativa (substitua <name>
pelo seu nome) e selecione Executar:
var name = "<name>";
Console.WriteLine($"Hello, {name}. It's a pleasure to meet you!");
Quando o código é executado, Saída exibe uma cadeia de caracteres que inclui seu nome na saudação. O argumento de cadeia de caracteres da chamada de método WriteLine é uma expressão de cadeia de caracteres interpolada. Ela é um tipo de modelo que permite que você construa uma única cadeia de caracteres (chamado de cadeia de caracteres de resultado) com base em uma cadeia de caracteres que inclui o código inserido. As expressões de cadeias de caracteres interpoladas são particularmente úteis para inserir valores em uma cadeia de caracteres ou para concatenar (unir) várias cadeias de caracteres.
O exemplo acima contém os dois elementos que toda expressão de cadeia de caracteres interpolada deve ter:
Um literal de cadeia de caracteres que começa com o caractere
$
antes do caractere de aspas de abertura. Não pode haver nenhum espaço entre o símbolo$
e o caractere de aspas. (Se quiser ver o que acontece ao incluir espaços, insira um após o caractere$
na janela interativa e execute o código atualizado. O compilador C# avisa: "Caractere '$' inesperado".)Uma ou mais expressões de interpolação. Uma expressão de interpolação é indicada por chaves de abertura e fechamento (
{
e}
). Você pode colocar qualquer expressão de C# que retorne um valor (incluindonull
) dentro das chaves.
Vamos testar mais alguns exemplos de interpolação de cadeias de caracteres com outros tipos de dados.
Incluir diferentes tipos de dados
Na etapa anterior, você usou a interpolação de cadeias de caracteres para inserir uma cadeia de caracteres dentro de outra. Cada expressão de interpolação que faz parte de uma expressão de cadeia de caracteres interpolada pode ser de qualquer tipo de dados. Vamos incluir valores de várias expressões de tipo de dados em uma cadeia de caracteres interpolada.
No exemplo a seguir, primeiro definimos uma tupla que tem os membros Name
, Price
e perPackage
. Execute o seguinte código na janela interativa:
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 a expressão interpolada item.Price
na cadeia de caracteres interpolada é resolvida como o texto "1.99" na cadeia de caracteres de resultado. Isso ocorre porque, quando o tipo do resultado da expressão não é uma cadeia de caracteres, o resultado é resolvido como uma cadeia de caracteres da seguinte maneira:
Se a expressão de interpolação for avaliada como
null
, uma cadeia de caracteres vazia ("" ou String.Empty) será usada.Se a expressão interpolada não foi avaliada como
null
, normalmente o métodoToString
da expressão resultante será chamado.
Na saída deste exemplo, a data é muito precisa (o preço de "eggplant" não muda a cada segundo) e o valor do preço não indica uma unidade monetária. Na próxima etapa, você aprenderá a corrigir esses problemas controlando o formato das representações das cadeias de caracteres dos resultados de expressão.
Controlar a formatação de expressões de interpolação
Na etapa anterior, duas cadeias de caracteres formatadas de maneira inadequada foram inseridas na cadeia de caracteres de resultado. Uma era um valor de data e hora para a qual apenas a data era adequada. A segunda era um preço que não indicava a unidade monetária. Os dois problemas são fáceis de se resolver. A interpolação de cadeias de caracteres permite especificar cadeias de caracteres de formato que controlam a formatação de tipos específicos. Modifique a chamada a Console.WriteLine
no exemplo anterior para incluir as cadeias de caracteres de formato para as expressões de data e de preço, conforme mostrado na linha a seguir:
Console.WriteLine($"On {date:d}, the price of {item.Name} was {item.Price:C2} per {item.perPackage} items");
Você especifica uma cadeia de caracteres de formato colocando dois-pontos (":") e a cadeia de caracteres de formato após a expressão de interpolação. "d" é uma cadeia de caracteres de formato de data e hora padrão que representa o formato de data abreviada. "C2" é um cadeia de caracteres de formato numérico padrão que representa um número como um valor de moeda com dois dígitos após o ponto decimal.
Diversos tipos nas bibliotecas do .NET são compatíveis com um conjunto predefinido de cadeias de caracteres de formato. Isso inclui todos os tipos numéricos e os tipos de data e hora. Para obter uma lista completa dos tipos que são compatíveis com as cadeias de caracteres de formato, consulte Cadeias de caracteres de formato e tipos da biblioteca de classes do .NET no artigo Tipos de formatação no .NET.
Tente modificar as cadeias de caracteres de formato no exemplo para ver como elas afetam a formatação da data e hora e o valor numérico. Altere o "d" em {date:d}
para "t" (para exibir o formato de hora abreviada), para "y" (para exibir o ano e o mês) e para "yyyy" (para exibir o ano como um número de quatro dígitos). Altere o "C2" em {price:C2}
para "e" (para obter notação exponencial) e para "F3" (para um valor numérico com três dígitos após o ponto decimal).
Além de controlar a formatação, você também pode controlar a largura do campo e o alinhamento das cadeias de caracteres formatadas incluídas na cadeia de caracteres de resultado. Na próxima etapa, você aprenderá como fazer isso.
Controlar a largura do campo e o alinhamento de expressões de interpolação
Normalmente, quando o resultado de uma expressão de cadeia de caracteres interpolada é formatado em uma cadeia de caracteres, essa cadeia de caracteres é incluída em uma cadeia de caracteres sem espaços à esquerda nem à direita. Especialmente quando você trabalha com um conjunto de dados, poder controlar a largura do campo e o alinhamento do texto ajuda a produzir uma saída mais legível. Para ver isso, execute o código a seguir:
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}|");
Os nomes dos item são alinhados à esquerda e suas quantidades são alinhadas à direita. Você especifica o alinhamento adicionando uma vírgula (",") após a expressão de interpolação e designando a largura mínima do campo. Se o valor especificado for um número positivo, o campo será alinhado à direita. Se for um número negativo, o campo será alinhado à esquerda.
Tente remover os sinais negativos do código {"Item",-25}
e {item.Key,-25}
e execute o exemplo novamente. Desta vez, os nomes dos itens são alinhados à direita.
Você pode combinar um especificador de alinhamento e uma cadeia de caracteres de formato em uma única expressão de interpolação. Para fazer isso, especifique o alinhamento primeiro, seguido por dois-pontos e pela cadeia de caracteres de formato. Teste o seguinte código que exibe três cadeias de caracteres formatadas com larguras de campo definidas:
Console.WriteLine($"[{DateTime.Now,-20:d}] Hour [{DateTime.Now,-10:HH}] [{1063.342,15:N2}] feet");
Parabéns!
Você concluiu o tutorial interativo de interpolação de cadeias de caracteres. Visite o site do .NET para baixar o SDK do .NET Core, criar um projeto em seu computador e continuar criando códigos.
Para saber mais, confira Interpolação de cadeia de caracteres.
Tem algum problema com essa seção? Se tiver, envie seus comentários para que possamos melhorar esta seção.