Neu in .NET 7 [1]: Raw Literal Strings in C# 11.0
Das mit dem jüngsten .NET-Release veröffentlichte C# 11 bietet eine neue, einfache Methode zum Anlegen von Zeichenketten mit Umbrüchen und Einrückungen.
- Dr. Holger Schwichtenberg
Zu .NET 7.0 gehört auch eine neue C#-Sprachversion. In C# 11.0 gibt es eine neue Syntaxform für Zeichenketten mit Umbrüchen. Bei einem Raw Literal String beginnt die Zeichenkette mit drei oder mehr Anführungszeichen, also beispielsweise """
und endet mit der gleichen Anzahl von Anführungszeichen.
Die Motivation für dieses neue Sprachfeature war, eine Zeichenkettenrepräsentation zu erschaffen, in der keine Steuerzeichen (Escape-Sequenzen) notwendig werden, mit der sich aber dennoch einfach Umbrüche abbilden lassen und die Interpolation unterstützt.
In Raw Literal Strings gilt:
- Umbrüche landen in der Zeichenkette.
- Es gibt keine Steuerzeichen.
- Einrückungen bleiben erhalten, aber in jeder Zeile entfallen genauso viele Einrückungen wie es Einrückungen in der letzten Zeile vor dem Ende gibt.
- Interpolationsausdrücke sind möglich, mit zwei oder mehr Dollarzeichen vor den Anführungszeichen. Es sind dann in der Zeichenkette für den Interpolationsausdruck genauso viele geschweifte Klammern zu verwenden.
Ein erstes Beispiel mit einem Raw Literal String (hier ohne Einrückungen und ohne Interpolation) zeigt folgendes Codefragment:
// Raw Literal String: 3 oder mehr Anfuehrungszeichen zu Beginn
var rawLiteralString = """"
.NET 7.0
ist am 8. November 2022 erschienen
mit Support fuer 18 Monate
"""";
Die bisherigen Syntaxformen "Regular String" (Umbrüche mit \n
) und "Verbatim String" (Beginn mit @
) bleiben aber weiterhin erlaubt:
var regularString = "\n.NET 7.0\nist am 8. November 2022 " +
+ "erschienen\n mit Support fuer 18 Monate.\n";
var verbatimString = @"
.NET 7.0
ist am 8. November 2022 erschienen
mit Support fuer 18 Monate
";
Visual Studio 2022 bietet seit Unterversion 17.2 Refactoring-Funktionen, um zwischen den nun drei Zeichenkettenformen umzuwandeln:
Die folgenden Beispiele zeigen Raw Literal Strings mit Einrückung und Interpolation:
var name = "Dr. Holger Schwichtenberg";
var website = "www.dotnet-doktor.de";
var nameUndWebsite1 = $$"""
Name: {{{name}}} Website: {{{website}}}
""";
Console.WriteLine(nameUndWebsite1);
// Name: {Dr. Holger Schwichtenberg} Website: {www.dotnet-doktor.de}
var nameUndWebsite2 = $$$"""
Name: {{{name}}} Website: {{{website}}}
""";
Console.WriteLine(nameUndWebsite2);
// Name: Dr. Holger Schwichtenberg Website: www.dotnet-doktor.de
Praxisbeispiel für den Einsatz von Raw Literal Strings
Der folgende Code zeigt ein Raw Literal String für die Konstruktion einer JSON-Zeichenkette mit Einrückung und Interpolation:
var name = "Dr. Holger Schwichtenberg";
var website = "www.dotnet-doktor.de";
var json = $$"""
{
"Person": {
"Name": "{{name}}",
"Webseite": "{{website.ToLower()}}"
}
}
""";
Der Debugger Visualizer zeigt an, dass die Einrückungen per Leerzeichen erhalten bleiben:
Die Ausgabe an der Konsole sieht daher folgendermaßen aus:
Hinweis zu den Einrückungen in Raw Literal Strings
Die Einrückungen bei einem Raw Literal können gemischt aus Tabulatoren und Leerzeichen bestehen:
Allerdings muss die Einrückung links von der Linie einheitlich in allen Zeilen sein. Die folgende Abbildung zeigt eine ungültige Einrückung, weil in Zeile 51 zweimal ein Tabulator verwendet wird, in allen anderen Zeilen nur einmal. Visual Studio zeigt daher auch nicht die Linie an, die die Einrückung im Code von der Einrückung im String getrennt:
(rme)