TOC

This article has been localized into German by the community.

Operatoren:

Der String-Erweiterungsoperator

An anderer Stelle in diesem Tutorial finden Sie eine ausführliche Beschreibung des Datentyps string, da der Umgang mit Text eine so wichtige Aufgabe ist. In diesem Artikel konzentrieren wir uns auf einen speziellen Operator für die Arbeit mit Strings, mit dem Sie beim Deklarieren von Strings einige zusätzliche Tricks ausführen können. Er heißt String-Interpolation (eingeführt in C# 6.0) und erlaubt Ihnen, spezielle Marker in Ihren String einzufügen, die der Interpreter später durch die entsprechenden Werte ersetzen wird. Es funktioniert ähnlich wie die String.Format() -Methode, die wir bereits besprochen haben, aber die Syntax ist lesbarer und bequemer.

Die String-Interpolation kann sehr einfach durchgeführt werden - setzen Sie die Zeichenfolge einfach mit einem $ -Zeichen voran. Wie immer werden wir direkt zu einem Beispiel springen:

string name = "John Doe";
int age = 42;

Console.WriteLine(name + " is " + age + " years old");
Console.WriteLine($"{name} is {age} years old");

In den letzten beiden Zeilen machen wir genau dasselbe: zuerst auf traditionelle Weise, wo wir eine Zeichenkette mit unseren beiden Variablen verketten und dann die String-Interpolation verwenden. Beachten Sie, dass wir Variablen direkt in die Zeichenfolge einfügen können, indem wir sie mit geschweiften Klammern umgeben. Und obwohl dies innerhalb einer Zeichenfolge geschieht, überprüft der Compiler tatsächlich die Variablen, die Sie injizieren möchten!

Außerdem müssen die Variablen, die Sie verwenden, keine einfachen Typen sein. Sie können auch Eigenschaften aus komplexen Objekten verwenden, genau wie bei einer normalen String-Verkettung. Hier ist ein Beispiel:

var user = new
{
    Name = "John Doe",
    Age = 42
};
Console.WriteLine($"{user.Name} is {user.Age} years old");

Formatierte Zeichenketten

Standardmäßig werden die von Ihnen eingeschlossenen Variablen in die erforderliche Zeichenfolgendarstellung umgewandelt, indem für die ToString() -Methode aufgerufen wird. Aber manchmal suchen Sie vielleicht nach etwas mehr Kontrolle darüber, wie die einzelnen Variablen angezeigt werden, und glücklicherweise ist dies dank Formatzeichenfolgen sehr einfach. Setzen Sie einfach einen Doppelpunkt (:) hinter die Variable und geben Sie eine Formatzeichenfolge ein, die verwendet werden soll, wie in diesem Beispiel:

double daysSinceMillenium = (DateTime.Now - new DateTime(2000, 1, 1)).TotalDays;  
Console.WriteLine($"Today is {DateTime.Now:d} and {daysSinceMillenium:N2} days have passed since the last millennium!");

Das Ergebnis sieht abhängig von Ihren Systemeinstellungen für Datum und Zahl wie folgt aus:

Today is Friday, June 29, 2018 and 6,754.49 days have passed since the last millenium!

Beachten Sie, dass das Datum im langen Datumsformat dargestellt wird (wie mit der Formatzeichenfolge "D" angegeben), und die Zahl ist schön mit tausend Trennzeichen und zwei Dezimalzahlen formatiert, dank der numerischen Zeichenkette "N2".

Wenn Sie noch mehr Kontrolle wünschen, können Sie von den Standardformatzeichenfolgen in benutzerdefinierte Formatzeichenfolgen wechseln, z.B.: für Daten:

Console.WriteLine($"Today is {DateTime.Now:yyyy-MM-dd}");

Es gibt viele weitere Möglichkeiten zum Formatieren einer "DateTime", die Sie in einer interpolierten Zeichenfolge verwenden können. Für alle Optionen konsultieren Sie bitte die Dokumentation.

Jenseits von Variablen

Jetzt haben wir Variablen und sogar Eigenschaften von Objekten in unsere Strings eingefügt und wir haben gesehen, wie einfach wir die resultierenden Strings formatieren können. Die String-Interpolation geht jedoch darüber hinaus, da Sie tatsächlich ganze C# -Ausdrücke in Ihren Zeichenketten haben können, solange sie zu etwas führen, das an eine Zeichenkette angehängt werden kann. Ein gutes Beispiel dafür ist die klassische "mit oder ohne e am Ende" -Situation, in der Sie einen String erstellen müssen, der entweder "1 Jahr alt" oder "2 Jahre e alt" ist. Sie können dies direkt mit der String-Interpolation tun, indem Sie einfach den ternären Operator in der Zeichenfolge verwenden:

string name = "John Doe";
int age = 42;

Console.WriteLine($"{name} is {age} year{(age == 1 ? "" : "s")} old");

Beachten Sie, wie ich eine einfache if-then-else-Anweisung in einen Satz von Klammern eingefügt habe. Wir können das tun, weil das Ergebnis des Ausdrucks eine Zeichenkette ist - entweder eine leere oder ein "s". Sie können auch Mathe machen:

Console.WriteLine($"5 + 5 * 2 = {((5 + 5) * 2)}");

Solange das Ergebnis des Ausdrucks in eine Zeichenfolge umgewandelt werden kann, können Sie es innerhalb Ihrer interpolierten Zeichenfolge verwenden.

String-Interpolation & Verlassen

Sie werden nicht lange mit der String-Interpolation gearbeitet haben, bevor Ihnen eine sehr offensichtliche Frage in den Sinn kommen wird: Wie kann ich Zeichen einbeziehen, die eine bestimmte Bedeutung haben, z.B.: geschweifte Klammern? Die Antwort darauf ist in der Regel das Verlassen - das Voranstellen/Nachsetzen des Charakters mit einem anderen Zeichen, um den speziellen Zweck zu negieren. Dies gilt auch für die String-Interpolation, bei der geschweifte Klammern zweimal geschrieben werden sollten, wenn sie wie folgt behandelt werden sollen:

Console.WriteLine($"Insert {name} between curly braces: {{name here}}");

Das Ergebnis:

Insert John Doe between curly braces: {name here}

Zusammenfassung

Wenn Sie jemals die klassische String-Verkettung betrachtet haben und sie als zu ungeschickt empfunden haben, werden Sie die String-Interpolation lieben! Sie wurde in C# Version 6.0 eingeführt und ermöglicht Ihnen das Schreiben von Text, der Variablen auf sehr natürliche und leicht lesbare Weise enthält. Sie sind auch wirklich cool, weil sie Ihnen erlaubt, Ausdrücke direkt in die Strings zu integrieren, aber seien Sie vorsichtig - zu einem bestimmten Zeitpunkt ist Ihre interpolierte Zeichenkette möglicherweise so weit fortgeschritten, dass sie schwieriger zu lesen ist als die Alternativen.


This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!