Wie verwendet man wörtliche Zeichenfolgen mit Interpolation?


132

In C # 6 gibt es eine neue Funktion: interpolierte Zeichenfolgen.

Mit diesen können Sie Ausdrücke direkt in Code einfügen, anstatt sich auf Indizes zu verlassen:

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

Wird:

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

Wir haben jedoch viele Zeichenfolgen über mehrere Zeilen hinweg, wobei wörtliche Zeichenfolgen (hauptsächlich SQL-Anweisungen) wie folgt verwendet werden:

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

Das Zurücksetzen auf normale Zeichenfolgen scheint chaotisch:

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

Wie verwende ich sowohl wörtliche als auch interpolierte Zeichenfolgen zusammen?


3
Wenn es wirklich um SQL-Zeichenfolgen geht, gibt es einen Grund, warum Sie stattdessen keine parametrisierten Abfragen verwenden?
Svick

1
"Wir haben viele Zeichenfolgen in mehreren Zeilen mit wörtlichen Zeichenfolgen (hauptsächlich SQL-Anweisungen)" klingt so, als hätten Sie viele SQL-Zeichenfolgen, die SQL-Injection-Angriffe ermöglichen.
Cetin Basoz

1
@svick wir sind, alle Benutzereingaben sind parametrisiert. Wir verwenden dynamisches SQL jedoch immer noch stark, da wir dynamisch SQL für unsere Entitäten im Code erstellen.
Keith

1
@CetinBasoz wir nicht - alle Benutzereingaben sind parametrisiert. Es gibt viele Umstände, unter denen Sie über dynamisches SQL verfügen - beispielsweise LINQ oder ein anderes Objektzuordnungsframework.
Keith

Antworten:


193

Sie können beide $und @Präfixe auf dieselbe Zeichenfolge anwenden :

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

Da wird in C # 6 eingeführt , interpoliert wörtlich Strings mit den Token starten musste $@, aber beginnend mit C # 8, können Sie entweder $@oder@$ .


56
Opposite ( @$"...") funktioniert nicht, was mich hierher bringt.
Sinatr

12
@ Sinatr ja, es muss $@"..."in dieser Reihenfolge sein.
Keith

35
Die Tatsache, dass es $@funktioniert, wenn @$es nicht funktioniert, macht vollkommen Sinn, wenn Sie darüber nachdenken. Wenn ich darüber verwirrt bin, was häufig vorkam, als ich anfing, diese Syntax zu verwenden, sagte ich mir immer: "Interpoliere diese wörtliche Zeichenfolge", weil das Gegenteil keinen Sinn ergeben würde.
Heki

1
@ RayLuo nicht wirklich, aber angesichts der Geschwindigkeit, mit der verschiedene .NET JSON-Serialisierer geworden sind, sollten Sie JSON wahrscheinlich sowieso nicht direkt codieren.
Keith

1
Wenn Sie das Duo auf ein vorhandenes anwenden const string, lassen Sie das fallen const.
bvj
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.