Usando variáveis ​​dentro de strings

88

Em PHP, posso fazer o seguinte:

$name = 'John';
$var = "Hello {$name}";    // => Hello John

Existe uma construção de linguagem semelhante em C #?

Eu sei que existe, String.Format();mas quero saber se isso pode ser feito sem chamar uma função / método na string.

thwd
fonte

Respostas:

219

Em C # 6, você pode usar interpolação de string :

string name = "John";
string result = $"Hello {name}";

O destaque de sintaxe para isso no Visual Studio torna-o altamente legível e todos os tokens são verificados.

Fenton
fonte
86

Essa funcionalidade não está embutida no C # 5 ou anterior.
Atualização: C # 6 agora suporta interpolação de string, veja as respostas mais recentes.

A maneira recomendada de fazer isso seria com String.Format:

string name = "Scott";
string output = String.Format("Hello {0}", name);

No entanto, escrevi uma pequena biblioteca de código aberto chamada SmartFormat que se estende String.Formatpara que possa usar espaços reservados nomeados (por meio de reflexão). Então, você pode fazer:

string name = "Scott";
string output = Smart.Format("Hello {name}", new{name}); // Results in "Hello Scott".

Espero que você goste!

Scott Rippey
fonte
2
Que tipo de penalidade de desempenho existe por usar sua implementação de reflexão versus a string padrão. Formato?
elegante de
Vejo que você já tem uma página de desempenho no wiki. Parece bastante promissor. Bom trabalho!
elegante de
Sim, acredito que a página de desempenho provavelmente responde à sua pergunta, mas não fiz nenhuma comparação entre "Olá {0}" e "Olá {nome}". Obviamente, a reflexão vai demorar mais. No entanto, usar o recurso de armazenamento em cache melhora o desempenho da análise e pode minimizar a diferença. De qualquer forma, as coisas são RÁPIDAS!
Scott Rippey de
1
Isso não é mais verdade. C # 6 adicionou isso como um recurso
Cole Johnson
5

Até C # 5 (-VS2013), você deve chamar uma função / método para ele. Uma função "normal", como String.Formatou uma sobrecarga do operador +.

string str = "Hello " + name; // This calls an overload of operator +.

Em C # 6 (VS2015) a interpolação de strings foi introduzida (conforme descrito por outras respostas).

Anders Abel
fonte
4

Use os seguintes métodos

1: Método um

var count = 123;
var message = $"Rows count is: {count}";

2: Método dois

var count = 123;
var message = "Rows count is:" + count;

3: Método três

var count = 123;
var message = string.Format("Rows count is:{0}", count);

4: Método quatro

var count = 123;
var message = @"Rows
                count
                is:{0}" + count;

5: Método cinco

var count = 123;
var message = $@"Rows 
                 count 
                 is: {count}";
Abn Najaf
fonte
1
Seria bom adicionar um comentário explicando por que você escolheria usar cada um desses métodos.
ZombieCode