Mehrzeilige Zeichenfolgen in C#: Von Hacks bis C# 11 – Der vollständige Leitfaden

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Einst auf Stack Overflow: Der Fluch langer Zeichenfolgen in C#



Stellen Sie sich folgende Situation vor. Sie schreiben in C# eine JSON-Konfiguration, eine SQL-Abfrage oder, sagen wir, eine HTML-Vorlage direkt im Code. Die Zeichenfolge wird lang, unschön und absolut unlesbar. Sie drücken die Eingabetaste, um den Text umzubrechen... und erhalten einen Kompilierungsfehler. Kommt Ihnen bekannt vor?



Die Frage "Multiline string literal in C#" auf Stack Overflow hat Zehntausende von Aufrufen gesammelt. Und das ist kein Zufall. Lange Zeit war C# nicht die freundlichste Sprache für die Arbeit mit mehrzeiligem Text. Aber die Zeiten ändern sich. In diesem Artikel gehen wir den Weg von Notlösungen bis hin zu eleganten Lösungen, die in C# 11 eingeführt wurden.



Wenn Sie in C# programmieren und mit mehrzeiligen Zeichenfolgenliteralen arbeiten, spart Ihnen dieses Material stundenlanges Googeln. Los geht's!



Das Problem: Warum ist einfaches Drücken der Eingabetaste eine schlechte Idee?



In C# (wie auch in C++) ist ein Zeichenfolgenliteral eine Folge von Zeichen, die in Anführungszeichen eingeschlossen ist. Ein Zeilenumbruch innerhalb solcher Anführungszeichen ist ein Syntaxfehler. Der Compiler versteht einfach nicht, wo die Zeichenfolge endet.



So sollte man es NICHT machen:



// Kompilierungsfehler!string query = "SELECT * FROM UsersWHERE Age > 18ORDER BY Name";


Der Compiler sieht "SELECT * FROM Users – und das war's. Danach kommt Dunkelheit. Früher behalfen sich Entwickler, so gut sie konnten. Lassen Sie uns die Entwicklung der Lösungen durchgehen.



Die alte Methode: Verbatim string (@-Zeichenfolge) – Die Rettung in der Not



Das Erste, was einem in den Sinn kommt, ist das verbatim string literal. Sie setzen einfach ein @ vor das öffnende Anführungszeichen. Dies deaktiviert die Interpretation von Escape-Sequenzen (außer doppelten Anführungszeichen "").



Es gibt jedoch einen Haken: Einrückungen werden ebenfalls Teil der Zeichenfolge.



Beispiel mit verbatim string:



string json = @"{    ""name"": ""Alice"",    ""age"": 30}";Console.WriteLine(json);


Ausgabe:

{    "name": "Alice",    "age": 30}


Vorteile:

  • Funktioniert in allen C#-Versionen.
  • Kein Escapen des umgekehrten Schrägstrichs (\\) erforderlich.

Nachteile:

  • Anführungszeichen im Inneren müssen verdoppelt werden ("") – das ist schrecklich, wenn viel JSON vorkommt.
  • Einrückungen links (Leerzeichen/Tabulatoren) gelangen in die resultierende Zeichenfolge.
  • Kann nicht direkt mit Zeichenfolgeninterpolation ($) gemischt werden (aber $@ ist möglich).


Diese Methode ist immer noch beliebt, aber für sauberen Code ist sie nicht ideal. Der eigentliche Durchbruch gelang mit C# 11.



Die neueste Methode: Raw string literal (C# 11 und .NET 7+)



Ab C# 11 haben wir das raw string literal – buchstäblich "rohes Zeichenfolgenliteral". Es löst 99% der Probleme mit Mehrzeiligkeit.



Syntax: Drei oder mehr doppelte Anführungszeichen hintereinander (""").



Beispiel 1: Einfaches JSON ohne Escapen



string json = """    {        "name": "Alice",        "age": 30    }    """;Console.WriteLine(json);


Ausgabe:

{    "name": "Alice",    "age": 30}


Magie: Anführungszeichen innerhalb der Zeichenfolge müssen nicht verdoppelt werden! Der Compiler versteht, dass die Zeichenfolge erst endet, wenn er drei aufeinanderfolgende Anführungszeichen sieht.



Beispiel 2: SQL-Abfrage mit Einrückungen



string query = """    SELECT         u.Name,        o.OrderDate    FROM Users u    JOIN Orders o ON u.Id = o.UserId    WHERE o.Status = 'Active'    ORDER BY o.OrderDate DESC    """;Console.WriteLine(query);


Wichtig zu Einrückungen: Die schließenden Anführungszeichen (""") legen die Basiseinrückungsebene fest. Alle Zeilen, die eine geringere Einrückung als die schließenden Anführungszeichen haben, werden abgeschnitten. Dies ermöglicht es, die Lesbarkeit des Codes zu bewahren, ohne die Zeichenfolge mit überflüssigen Leerzeichen zu überladen.

Blogs

Buchempfehlungen