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.

vorlesen Druckansicht 3 Kommentare lesen

(Bild: Shutterstock.com/calimedia)

Lesezeit: 2 Min.
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
Der Dotnet-Doktor – Holger Schwichtenberg

Dr. Holger Schwichtenberg ist technischer Leiter des Expertennetzwerks www.IT-Visions.de, das mit 53 renommierten Experten zahlreiche mittlere und große Unternehmen durch Beratungen und Schulungen sowie bei der Softwareentwicklung unterstützt. Durch seine Auftritte auf zahlreichen nationalen und internationalen Fachkonferenzen sowie mehr als 90 Fachbücher und mehr als 1500 Fachartikel gehört Holger Schwichtenberg zu den bekanntesten Experten für .NET und Webtechniken in Deutschland.

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.

Videos by heise

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)