2015-07-26 10 views
74

In C# 6 c'è una nuova funzione: stringhe interpolate.Come si usano le stringhe letterali con l'interpolazione?

Questi permettono di inserire le espressioni direttamente nel codice, piuttosto che basarsi su indici:

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

diventa:

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

Tuttavia, abbiamo un sacco di stringhe su più righe utilizzando stringhe letterali (principalmente istruzioni SQL) come questo:

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

Ripristino di questi in modo regolare gs sembra disordinato:

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

Come utilizzare insieme le stringhe testuali e interpolate?

+3

Se si tratta davvero di stringhe SQL, v'è alcuna ragione per cui non si sta usando query parametrizzate, invece? – svick

+1

"abbiamo un sacco di stringhe su più righe utilizzando stringhe di parole (principalmente istruzioni SQL)" suona come se avessi un sacco di stringhe SQL che consentono attacchi SQL injection. –

+1

@svick siamo, tutto l'input dell'utente è parametrizzato. Tuttavia, utilizziamo ancora l'SQL dinamico pesantemente, poiché creiamo dinamicamente SQL per le nostre entità nel codice. – Keith

risposta

95

È possibile applicare sia $ e @ prefissi per la stessa stringa:

string s = [email protected]"Result... 
Adding ""{x}"" and {this.Y()} to foobar: 
{x.GetLog()}"; 
+35

L'opposto ('@ $" ... "') non funziona, il che mi porta qui. – Sinatr

+7

@Sinatr si, deve essere '$ @" ... "" in questo ordine. – Keith

+15

Il fatto che '$ @' funzioni quando '@ $' non ha, ha perfettamente senso quando ci pensate. Quando mi confondo su questo, che è accaduto di frequente quando ho iniziato ad usare questa sintassi, mi sono sempre detto: "Interpola questa stringa letterale" perché il contrario non avrebbe senso. – Heki