Lernprogramm: Verwenden der Zeichenfolgeninterpolation zum Erstellen eines Berichts in C#

In diesem Lernprogramm erstellen Sie eine kleine dateibasierte App , die eine formatierte Bestellzusammenfassung druckt. Auf dem Weg wenden Sie die Zeichenfolgeninterpolation an, um Werte in Text einzufügen, Zahlen und Währungen zu formatieren, Spalten anzugliedern und kulturspezifische Ausgaben zu erzeugen.

In diesem Lernprogramm wird davon ausgegangen, dass Sie mit grundlegenden C#-Konzepten vertraut sind. Eine Referenz der Interpolationssyntax nach einzelnen Features finden Sie unter Zeichenfolgeninterpolation.

Voraussetzungen

Erstellen der App

Eine dateibasierte App ist eine einzelne .cs Datei, die Sie ohne Projektdatei ausführen. Erstellen Sie einen Ordner für die App, und wechseln Sie dorthin:

mkdir StringInterpolation
cd StringInterpolation

Erstellen Sie eine leere Datei namens report.cs in diesem Ordner, und öffnen Sie sie in Ihrem Editor. Sie fügen in den folgenden Abschnitten Code hinzu und führen die App mit dotnet run report.cs aus.

Einfügen von Werten in Text

Einem Stringliteral wird das Präfix $ vorangestellt, um daraus eine interpolierte Zeichenfolge zu machen. Setzen Sie in der Zeichenfolge einen beliebigen C#-Ausdruck in geschweifte Klammern ({ und }); C# wertet den Ausdruck aus, konvertiert das Ergebnis in eine Zeichenfolge und fügt ihn ein.

Fügen Sie den folgenden Code zu report.cs hinzu, und führen Sie dann die Anwendung mit dotnet run report.cs aus:

string name = "Maria";
int itemCount = 3;

// Prefix a string literal with $ to interpolate expressions inside braces.
Console.WriteLine($"Hello, {name}! You have {itemCount} items in your cart.");
// => Hello, Maria! You have 3 items in your cart.

Das Ergebnis kombiniert den Literaltext mit den Werten von name und itemCount.

Formatieren von Zahlen und Währungen

Eine Bestellzusammenfassung zeigt Geld und Preise an, sodass rohe Zahlen wie 23.5 oder 0.08 unfertig aussehen und schwer zu lesen sind. Präsentieren Sie jeden Wert so, wie ein Kunde erwartet: einen Preis mit einem Währungssymbol und einem Steuersatz als Prozentsatz. Formatieren Sie sie im Rahmen der Interpolation.

Um einen Wert zu formatieren, fügen Sie nach dem Ausdruck einen Doppelpunkt (:) und eine Formatzeichenfolge hinzu. Die Standardformatzeichenfolgen C und P0 erzeugen Währungs- und Ganzzahlprozentsätze. Fügen Sie am Ende der Datei den folgenden Code hinzu:

decimal subtotal = 23.5m;
decimal taxRate = 0.08m;

// Follow an expression with :format to apply a standard or custom format string.
Console.WriteLine($"Subtotal: {subtotal:C}");
Console.WriteLine($"Tax rate: {taxRate:P0}");
Console.WriteLine($"Total:    {subtotal * (1 + taxRate):C}");
// => Subtotal: $23.50
// => Tax rate: 8%
// => Total:    $25.38

Die Formatzeichenfolge wendet die Konventionen der aktuellen Kultur an, sodass das Währungssymbol und trennzeichen den Einstellungen des Computers entsprechen.

Ausrichten von Werten in Spalten

Wenn Sie mehrere Datenzeilen drucken, wirken die Spalten durch Werte unterschiedlicher Länge ungleichmäßig und sind schwerer zu erfassen. Wenn Sie jeden Namen und jede Zahl unter einer konsistenten Überschrift anzuordnen möchten, geben Sie jedem Feld eine feste Breite, damit die Spalten unabhängig davon, wie lange jeder Wert ist, gerade bleiben.

Um eine minimale Feldbreite festzulegen, folgen Sie dem Ausdruck mit einem Komma (,) und der Breite. Eine positive Breite richtet den Wert rechtsbündig aus; eine negative Breite richtet ihn linksbündig aus. Kombinieren Sie Feldbreite und eine Formatzeichenfolge zu {expression,width:format}. Fügen Sie den folgenden Code hinzu, um eine tabellarische Zusammenfassung zu drucken:

(string Name, int Quantity, decimal Price)[] orders =
[
    ("Espresso", 2, 3.50m),
    ("Cappuccino", 1, 4.25m),
    ("Tea", 4, 2.00m),
];

// Follow an expression with ,width to set a minimum field width.
// A positive width right-aligns; a negative width left-aligns.
foreach (var order in orders)
{
    Console.WriteLine($"{order.Name,-12}{order.Quantity,3}{order.Price * order.Quantity,10:C}");
}
// => Espresso      2     $7.00
// => Cappuccino    1     $4.25
// => Tea           4     $8.00

Die links ausgerichtete Namensspalte und rechts ausgerichtete numerische Spalten werden in einer lesbaren Tabelle angeordnet.

Kulturspezifische Ausgabe produzieren

Eine interpolierte Zeichenfolge verwendet standardmäßig die aktuelle Kultur . Wenn Sie eine bestimmte Kultur benötigen, z. B. ein festes Format für Protokolle oder ein Gebietsschema für einen Beleg, übergeben Sie eine Kultur an String.Create(IFormatProvider, DefaultInterpolatedStringHandler). Fügen Sie den folgenden Code hinzu:

decimal total = 1234.56m;

// An interpolated string uses the current culture by default.
// Use string.Create with a culture to control the formatting explicitly.
string germanReceipt = string.Create(
    new CultureInfo("de-DE"), $"Gesamt: {total:C}");
string invariantLog = string.Create(
    CultureInfo.InvariantCulture, $"total={total:F2}");

Console.WriteLine(germanReceipt);
Console.WriteLine(invariantLog);
// => Gesamt: 1.234,56 €
// => total=1234.56

Der deutsche Beleg verwendet ein Komma als Dezimaltrennzeichen und das Eurosymbol. Das invariante Protokoll verwendet einen Punkt und kein Symbol, unabhängig von der Computerkultur.

Nächste Schritte

Sie haben die Zeichenfolgeninterpolation zum Einfügen, Formatieren, Ausrichten und Lokalisieren von Werten verwendet. Den vollständigen Satz an Interpolationsfunktionen, einschließlich Rohzeichenfolgenliteralen, maskierter geschweifter Klammern und konstanter interpolierter Zeichenfolgen, finden Sie im Konzeptartikel:

Siehe auch