Como você usa seqüências textuais com interpolação?


133

No C # 6, há um novo recurso: seqüências de caracteres interpoladas.

Isso permite que você coloque expressões diretamente no código, em vez de confiar em índices:

string s = string.Format("Adding \"{0}\" and {1} to foobar.", x, this.Y());

Torna-se:

string s = $"Adding \"{x}\" and {this.Y()} to foobar.";

No entanto, temos muitas seqüências de caracteres em várias linhas usando seqüências textuais (principalmente instruções SQL) como esta:

string s = string.Format(@"Result...
Adding ""{0}"" and {1} to foobar:
{2}", x, this.Y(), x.GetLog());

A reversão para cadeias regulares parece confusa:

string s = "Result...\r\n" +
$"Adding \"{x}\" and {this.Y()} to foobar:\r\n" +
x.GetLog().ToString();

Como uso as seqüências verbatim e interpoladas juntas?


3
Se é realmente sobre seqüências de caracteres SQL, existe algum motivo para você não estar usando consultas parametrizadas?
— svick

1
"temos muitas cadeias de caracteres em várias linhas usando cadeias textuais (principalmente instruções SQL)" parece que você tem várias cadeias de SQL que permitem ataques de injeção de SQL.
— Cetin Basoz

1
@ Rick somos, tudo o que a entrada do usuário é parametrizada. No entanto, ainda usamos muito o SQL dinâmico, pois criamos SQL dinamicamente para nossas entidades no código.
— Keith

1
@CetinBasoz nós não - toda a entrada do usuário é parametrizada. Existem várias circunstâncias em que você possui SQL dinâmico - por exemplo, LINQ ou qualquer outra estrutura de mapeamento de objetos.
— Keith

Respostas:


194

Você pode aplicar ambos $e @prefixos à mesma sequência:

string s = $@"Result...
Adding ""{x}"" and {this.Y()} to foobar:
{x.GetLog()}";

Desde que foram introduzidas no C # 6 , as seqüências verbais interpoladas tiveram que começar com os tokens $@, mas começando com o C # 8, você pode usar um $@ou outro@$ .


57
Oposto ( @$"...") não funciona, o que me traz aqui.
— Sinatr 31/07

12
@ Sinatr sim, tem que estar $@"..."nessa ordem.
— Keith

36
O fato de $@funcionar quando @$não funciona , faz todo o sentido quando você pensa sobre isso. Quando fico confuso sobre isso, o que aconteceu com frequência quando comecei a usar essa sintaxe, sempre dizia para mim mesmo: "Interpole essa sequência literal" porque o contrário não faria sentido.
— Heki

1
@RayLuo não é verdade, mas, considerando a rapidez com que vários serializadores .NET JSON se tornaram, você provavelmente não deveria codificar diretamente JSON de qualquer maneira.
— Keith

1
Se aplicar a dupla a um existente const string , solte o const.
— BVJ
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.