2015-07-26 19 views
74

W języku C# 6 dostępna jest nowa funkcja: interpolowane ciągi znaków.W jaki sposób używasz dosłownych łańcuchów z interpolacją?

te pozwalają umieścić wyrażeń bezpośrednio w kodzie, zamiast polegać na indeksach:

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

Staje:

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

jednak mamy wiele ciągów w wielu liniach wykorzystujących wierne ciągi (głównie instrukcje SQL):

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

Powrót do regularnego strin Wydaje się, że gs jest brudny:

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

Jak używać zarówno ciągów słownych, jak i interpolowanych?

+3

Jeśli to naprawdę o ciągów SQL, czy istnieje jakikolwiek powód, dlaczego nie jesteś, a nie za pomocą sparametryzowanych kwerend? – svick

+1

"Mamy wiele ciągów w wielu wierszach, używając ciągów znaków słownych (głównie instrukcji SQL)" brzmi, jakbyś miał dużo ciągów SQL umożliwiających ataki SQL injection. –

+1

@ Sick, jesteśmy wszystko, dane wejściowe użytkownika są sparametryzowane. Ciągle używamy dynamicznego SQL, ponieważ dynamicznie tworzymy SQL dla naszych encji w kodzie. – Keith

Odpowiedz

95

Można stosować zarówno $ i @ prefiksy do tego samego łańcucha:

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

Po przeciwnej stronie ('@ $" ... "') nie działa, co sprowadza mnie tutaj. – Sinatr

+7

@Sinatr tak, to musi być '$ @" ... "' w tej kolejności. – Keith

+15

Fakt, że '$ @' działa, gdy '@ $' nie działa, ma sens gdy myślisz o tym. Kiedy wprawi mnie to w zakłopotanie, co zdarza się często, gdy zacząłem używać tej składni, zawsze mówiłem sobie: "Interpoluj ten ciąg dosłowny", ponieważ przeciwieństwo nie miałoby sensu. – Heki