Verwenden formatierter Zeichenfolgen mit der Zeichenfolgeninterpolation
In diesem Tutorial wird erläutert, wie Sie die Zeichenfolgeninterpolation verwenden können, um Werte in eine einzige Zeichenfolge einzufügen. Sie lernen auch, wie Sie die Textformatierung der Ergebniszeichenfolge steuern können. Verwenden Sie Ihren Browser zum Schreiben und Ausführen von C#-Code. Dort werden Ihnen unmittelbar die Ergebnisse angezeigt.
Erstellen einer interpolierten Zeichenfolge
Führen Sie den folgenden Code im interaktiven Fenster aus. Wählen Sie die Schaltfläche Enter focus mode (Fokusmodus aktivieren) aus. Geben Sie anschließend den folgenden Codeblock in das interaktive Fenster ein (ersetzen Sie <name>
durch Ihren Namen), und wählen Sie Ausführen aus:
var name = "<name>";
Console.WriteLine($"Hello, {name}. It's a pleasure to meet you!");
Wenn Sie den Code ausführen, zeigt die Ausgabe eine Zeichenfolge an, die Ihren Namen in der Begrüßung enthält. Das Zeichenfolgenargument des Methodenaufrufs WriteLine ist ein interpolierter Zeichenfolgenausdruck. Dabei handelt es sich um eine Vorlage, durch die Sie eine einzelne Zeichenfolge (als Ergebniszeichenfolge bezeichnet) aus einer Zeichenfolge erstellen können, die eingebetteten Code enthält. Interpolierte Zeichenfolgenausdrücke sind besonders nützlich zum Einfügen von Werten in eine Zeichenfolge oder zum Verketten (bzw. Verknüpfen) von mehreren Zeichenfolgen.
Das oben stehende Beispiel enthält die beiden Elemente, die in jedem interpolierten Zeichenfolgenausdruck enthalten sein müssen:
Ein Zeichenfolgenliteral, das ein
$
-Zeichen vor dem öffnenden Anführungszeichen enthält. Zwischen dem$
-Symbol und dem Anführungszeichen darf kein Leerraum vorhanden sein. (Wenn Sie sehen möchten, was geschieht, wenn Sie einen Leerzeichen einfügen, fügen Sie nach dem$
-Zeichen im interaktiven Fenster eins ein, und führen Sie dann den Code aus. Der C#-Compiler reklamiert „Unerwartetes Zeichen: "$".“)Mindestens ein Interpolationsausdruck. Ein Interpolationsausdruck wird durch eine öffnende und eine schließende geschweifte Klammer (
{
und}
) angegeben. Sie können jeden C#-Ausdruck in die Klammern einfügen, der einen Wert (einschließlichnull
) zurückgibt.
Im Folgenden finden Sie weitere Beispiele für die Zeichenfolgeninterpolation mit einigen anderen Datentypen.
Einschließen verschiedener Datentypen
Im vorherigen Schritt haben Sie die Zeichenfolgeninterpolation verwendet, um eine Zeichenfolge in eine andere einzufügen. Jeder Interpolationsausdruck, der Teil eines interpolierten Zeichenfolgenausdrucks ist, kann jedoch jeden beliebigen Datentyp aufweisen. Jetzt fügen wir Werte für Ausdrücke mit verschiedenen Datentypen in eine interpolierte Zeichenfolge ein.
Im folgenden Beispiel definieren wir zuerst ein Tupel, das die Member Name
, Price
und perPackage
enthält. Führen Sie den folgenden Code im interaktiven Fenster aus:
var item = (Name: "eggplant", Price: 1.99m, perPackage: 3);
var date = DateTime.Now;
Console.WriteLine($"On {date}, the price of {item.Name} was {item.Price} per {item.perPackage} items.");
Beachten Sie, dass der Interpolationsausdruck item.Price
der interpolierten Zeichenfolge in der Ergebniszeichenfolge zu dem Text „1.99“ aufgelöst wird. Dies liegt daran, dass der Ausdruckergebnistyp keine Zeichenfolge ist. Daher wird das Ergebnis auf folgende Weise zu einer Zeichenfolge aufgelöst:
Wenn der Interpolationsausdruck zu
null
ausgewertet wird, wird eine leere Zeichenfolge („“ oder String.Empty) verwendet.Wenn der Interpolationsausdruck nicht zu
null
ausgewertet wird, wird in der Regel die MethodeToString
des Ergebnisausdrucks aufgerufen.
Bei der Ausgabe dieses Beispielcodes ist das Datum zu genau angegeben (der Preis von Auberginen ändert sich nicht sekündlich), und der Wert der Variablen „price“ gibt keine Währungsinformation an. Im nächsten Schritt erfahren Sie, wie Sie diese Probleme beheben, indem Sie das Format der Zeichenfolgendarstellung der Ergebnisse des Ausdrucks steuern.
Steuern der Formatierung von Interpolationsausdrücken
Im vorherigen Schritt wurden zwei fehlerhaft formatierte Zeichenfolgen in die Ergebniszeichenfolge eingefügt. Bei einer davon handelte es sich um einen Datums- und Uhrzeitwert, bei dem nur das Datum relevant war. Bei der zweiten handelte es sich um einen Preis, bei dem keine Währungseinheit angegeben wurde. Beide Probleme sind einfach zu beheben. Mithilfe der Zeichenfolgeninterpolation können Sie Formatzeichenfolgen angeben, die die Formatierung bestimmter Typen steuern. Ändern Sie den Aufruf von Console.WriteLine
im vorherigen Beispiel, damit die Formatzeichenfolgen für die Ausdrücke „date“ und „price,“ wie in der folgenden Zeile dargestellt, enthalten sind:
Console.WriteLine($"On {date:d}, the price of {item.Name} was {item.Price:C2} per {item.perPackage} items");
Sie können eine Formatzeichenfolge angeben, indem Sie dem Interpolationsausdruck einen Doppelpunkt („:“) und die Formatzeichenfolge anfügen. Bei „d“ handelt es sich um eine Zeichenfolge für das Standardformat für Datum und Uhrzeit, die das kurze Datumsformat darstellt. Bei „C2“ handelt es sich um eine Zeichenfolge für das numerische Standardformat, die eine Zahl als Währungswert mit zwei Ziffern nach dem Dezimaltrennzeichen darstellt.
Einige Typen in den .NET-Bibliotheken unterstützen einen vordefinierten Satz von Formatzeichenfolgen. Darin sind alle numerischen Typen sowie alle Datums- und Uhrzeittypen enthalten. Eine vollständige Liste der Typen, die Formatzeichenfolgen unterstützen, finden Sie im Artikel Formatieren von Typen in .NET unter Format Strings and .NET Class Library Types (Formatzeichenfolgen und .NET-Klassenbibliothekstypen).
Versuchen Sie, die Formatzeichenfolgen im Beispiel zu verändern, um zu sehen, welche Auswirkungen sie auf die Formatierung des Datums, der Zeit und des numerischen Werts haben. Ändern Sie „d“ in {date:d}
in „t“ (um das kurze Uhrzeitformat anzuzeigen) sowie in „y“ (um das Jahr und den Monat anzuzeigen) und in „yyyy“ (um das Jahr als vierstellige Zahl anzuzeigen). Ändern Sie „C2“ in {price:C2}
in „e“ (für die Exponentialschreibweise) und in „F3“ (für einen numerischen Wert mit drei Ziffern nach dem Dezimaltrennzeichen).
Sie können zusätzlich zum Steuern der Formatierung auch die Feldbreite und die Ausrichtung der formatierten Zeichenfolgen steuern, die in der Ergebniszeichenfolge enthalten sind. Im nächsten Schritt erfahren Sie mehr zu diesem Thema.
Steuern der Feldbreite und der Ausrichtung von Interpolationsausdrücken
Wenn das Ergebnis eines interpolierten Zeichenfolgenausdrucks als Zeichenfolge formatiert wird, wird diese Zeichenfolge normalerweise in eine Ergebniszeichenfolge ohne führende oder nachgestellte Leerzeichen einbezogen. Die Feldbreite und Ausrichtung des Texts steuern zu können, ist insbesondere bei der Arbeit mit Daten hilfreich, um eine besser lesbare Ausgabe zu erzeugen. Wenn Ihnen dies angezeigt werden soll, führen Sie den folgenden Code aus:
var inventory = new Dictionary<string, int>()
{
["hammer, ball pein"] = 18,
["hammer, cross pein"] = 5,
["screwdriver, Phillips #2"] = 14
};
Console.WriteLine($"Inventory on {DateTime.Now:d}");
Console.WriteLine(" ");
Console.WriteLine($"|{"Item",-25}|{"Quantity",10}|");
foreach (var item in inventory)
Console.WriteLine($"|{item.Key,-25}|{item.Value,10}|");
Die Elementnamen sind linksbündig ausgerichtet. Die Mengen sind rechtsbündig ausgerichtet. Sie können die Ausrichtung festlegen, indem Sie einem Interpolationsausdruck ein Komma („,“) anfügen und die minimale Feldbreite angeben. Wenn der angegebene Wert eine positive Zahl ist, wird das Feld rechtsbündig ausgerichtet. Wenn er eine negative Zahl ist, wird das Feld linksbündig ausgerichtet.
Versuchen Sie die negativen Vorzeichen aus dem Code {"Item",-25}
und {item.Key,-25}
zu entfernen, und führen Sie das Beispiel erneut aus. In diesem Fall sind die Elementnamen rechtsbündig ausgerichtet.
Sie können einen Ausrichtungsspezifizierer und eine Formatzeichenfolge für einen einzigen Interpolationsausdruck kombinieren. Geben Sie dazu zunächst die Ausrichtung gefolgt von einem Doppelpunkt und der Formatzeichenfolge an. Testen Sie den folgenden Code, der drei formatierte Zeichenfolgen mit definierten Feldbreiten darstellt:
Console.WriteLine($"[{DateTime.Now,-20:d}] Hour [{DateTime.Now,-10:HH}] [{1063.342,15:N2}] feet");
Herzlichen Glückwunsch!
Sie haben das interaktive Tutorial für die Zeichenfolgeninterpolation abgeschlossen. Sie können die .NET-Website besuchen, um das .NET Core SDK herunterzuladen, ein Projekt auf Ihrem Computer zu erstellen und mit dem Programmieren fortzufahren.
Weitere Informationen finden Sie unter Zeichenfolgeninterpolation.
Liegt ein Problem mit diesem Abschnitt vor? Wenn ja, senden Sie uns Feedback, damit wir den Abschnitt verbessern können.