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.

Lesezeit: 2 Min.
In Pocket speichern
vorlesen Druckansicht Kommentare lesen 3 Beiträge

(Bild: Shutterstock.com/calimedia)

Von
  • 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.

Der Dotnet-Doktor – Holger Schwichtenberg

Dr. Holger Schwichtenberg ist Chief Technology Expert bei MAXIMAGO, die Innovations- und Experience-getriebener Softwareentwicklung, u.a. in hochkritischen sicherheitstechnischen Bereichen, anbietet. Zudem ist er Leiter des Expertennetzwerks www.IT-Visions.de, das mit 38 renommierten Experten zahlreiche mittlere und große Unternehmen durch Beratung und Schulung bei der Entwicklung sowie dem Betrieb von Software unterstützt.

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:

Refactoring für Zeichenketten in Visual Studio 2022 seit Version 17.2

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

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:

Raw Literal String im Debugger Visualizer

Die Ausgabe an der Konsole sieht daher folgendermaßen aus:

Ausgabe des Raw Literal String an der Konsole

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:

Die Whitespaces müssen einheitlich sein, damit die Raw Literal Strings korrekt eingerückt werden.

(rme)