This article has been localized into Portuguese by the community.
Operador de interpolação de String
Em outro lugar neste tutorial, você encontrará uma longa descrição do tipo de dados da string, porque lidar com o texto é uma tarefa tão importante. Neste artigo, vamos nos concentrar em um operador especial para trabalhar com strings, permitindo que você faça alguns truques extras ao declarar strings. Ele é chamado de interpolação de string (introduzido no C # 6.0) e permitirá que você coloque marcadores especiais em sua string, que o interpretador substituirá mais tarde pelos valores relevantes. Ele funciona muito parecido com o método String.Format() que já discutimos, mas a sintaxe é mais legível e conveniente.
A interpolação de strings pode ser obtida facilmente - basta prefixar a string com um caractere $. Como sempre, vamos pular direto para um exemplo:
string name = "John Doe";
int age = 42;
Console.WriteLine(name + " is " + age + " years old");
Console.WriteLine($"{name} is {age} years old");
Nas duas últimas linhas, fazemos exatamente a mesma coisa: primeiro da maneira tradicional, em que concatenamos uma string usando nossas duas variáveis e, em seguida, usando a interpolação de string. Observe como nos permite injetar variáveis diretamente na string, cercando-a com chaves. E mesmo que isso aconteça dentro de uma string, o compilador irá verificar as variáveis que você está tentando injetar!
Além disso, as variáveis que você usa não precisam ser tipos simples - você também pode usar propriedades de objetos complexos, da mesma forma que faria se estivesse fazendo uma concatenação regular de strings. Aqui está um exemplo:
var user = new
{
Name = "John Doe",
Age = 42
};
Console.WriteLine($"{user.Name} is {user.Age} years old");
Strings de Formato
Por padrão, as variáveis que você incluir serão transformadas na representação de string necessária chamando o método ToString(). Mas às vezes você pode estar procurando um pouco mais de controle sobre como cada variável é exibida e, felizmente, isso é muito simples de se fazer, graças às strings de formato. Basta colocar dois pontos (:) depois da variável e depois inserir uma string de formato a ser usada, como neste exemplo:
double daysSinceMillenium = (DateTime.Now - new DateTime(2000, 1, 1)).TotalDays;
Console.WriteLine($"Today is {DateTime.Now:d} and {daysSinceMillenium:N2} days have passed since the last millennium!");
O resultado será algo como isto, dependendo das configurações do sistema para datas e números:
Today is Friday, June 29, 2018 and 6,754.49 days have passed since the last millenium!
Observe como a data é representada no formato de data por extenso (conforme especificado com a string de formato "D") e o número é bem formatado com mil separadores e dois números decimais, graças à string de formato numérico "N2".
Se você quiser ainda mais controle, poderá alterar as strings de formato padrão para as strings de formato personalizado, por exemplo, para datas:
Console.WriteLine($"Today is {DateTime.Now:yyyy-MM-dd}");
Existem muitas outras maneiras de formatar um DateTime, que você pode usar em uma string interpolada. Para todas as opções, consulte a documentação .
Além das variáveis
Agora incluímos variáveis e até propriedades de objetos em nossas strings e vimos como é fácil formatar as strings resultantes. Mas a interpolação de strings vai além disso, porque você pode ter expressões C # inteiras dentro de suas strings, desde que elas resultem em algo que possa ser anexado a uma string. Um bom exemplo disso é a clássica situação "with ou without the ending s", onde você tem que criar uma string que seja "1 ano de idade" ou "2 anos s old". Você pode fazer isso diretamente com a interpolação de strings, simplesmente usando o operador ternário dentro da string:
string name = "John Doe";
int age = 42;
Console.WriteLine($"{name} is {age} year{(age == 1 ? "" : "s")} old");
Observe como inseri uma instrução if-then-else simples na string, dentro de um conjunto de parênteses. Podemos fazer isso porque o resultado da expressão é uma string - ou vazia ou "s". Você pode fazer matemática também:
Console.WriteLine($"5 + 5 * 2 = {((5 + 5) * 2)}");
Novamente, desde que o resultado da expressão possa ser transformado em uma string, você pode usá-lo em sua string interpolada.
Interpolação de String & amp; Escapando
Você não terá trabalhado com a interpolação de strings por muito tempo antes que uma pergunta muito óbvia venha à mente: Como posso incluir caracteres que tenham um significado específico, por exemplo? chaves, e tê-los tratados literalmente? A resposta para isso é geralmente escapar - o ato de prefixar/postfixing o personagem com outro personagem, para negar o propósito especial. Isto também é verdade para a interpolação de strings, onde as chaves devem ser escritas duas vezes se você quiser que elas sejam tratadas literalmente, assim:
Console.WriteLine($"Insert {name} between curly braces: {{name here}}");
O resultado:
Insert John Doe between curly braces: {name here}
Resumo
Se você já olhou para a concatenação clássica de cordas e pensou que ela é muito desajeitada, você vai adorar a interpolação de cordas! Foi introduzido no C # versão 6.0 e permite escrever texto que inclui variáveis de uma forma muito natural e fácil de ler. Eles também são muito legais em permitir que você integre expressões diretamente nas strings, mas tenha cuidado - em um certo ponto, sua string interpolada pode ser tão avançada que fica mais difícil de ler do que as alternativas.