Kurz: Vytvoření sestavy v jazyce C pomocí interpolace řetězců#

V tomto kurzu vytvoříte malou aplikaci založenou na souborech , která vytiskne souhrn formátovaných objednávek. V průběhu použijete interpolaci řetězců k vložení hodnot do textu, formátování čísel a měn, zarovnání sloupců a vytvoření výstupu specifického pro dané národní prostředí.

V tomto kurzu se předpokládá, že znáte základní koncepty jazyka C#. Přehled syntaxe interpolace po jednotlivých prvcích naleznete v tématu Interpolace řetězců.

Předpoklady

Vytvoření aplikace

Aplikace založená na souborech je jeden .cs soubor, který spustíte bez souboru projektu. Vytvořte složku pro aplikaci a přesuňte se do ní:

mkdir StringInterpolation
cd StringInterpolation

V této složce vytvořte prázdný soubor s názvem report.cs a otevřete ho v editoru. V následujících oddílech do něj přidáte kód a potom aplikaci spustíte pomocí dotnet run report.cs.

Vložení hodnot do textu

Přidejte před řetězcový literál $, aby se z něj stal interpolovaný řetězec. Do řetězce vložte libovolný výraz jazyka C# do složených závorek ({ a }); Jazyk C# vyhodnotí výraz, převede výsledek na řetězec a vloží ho.

Do report.cs přidejte následující kód a pak spusťte aplikaci:dotnet run report.cs

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.

Výsledek kombinuje literálový text s hodnotami name a itemCount.

Formátování čísel a měny

Souhrn objednávky zobrazuje částky a sazby, takže prostá čísla, jako jsou 23.5 nebo 0.08, působí nedokončeně a špatně se čtou. Prezentujte každou hodnotu tak, jak zákazník očekává: cenu se symbolem měny a sazbou daně v procentech. Naformátujte ho jako součást interpolace.

Chcete-li naformátovat hodnotu, uveďte za výrazem dvojtečku (:) a formátovací řetězec. Standardní formátovací C řetězce a P0 vytvářejí měnu a celočíselnou procentuální hodnotu. Na konec souboru přidejte následující kód:

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

Formátovací řetězec uplatňuje konvence aktuálního národního prostředí, takže symbol měny a oddělovače odpovídají nastavení počítače.

Zarovnat hodnoty do sloupců

Když vytisknete několik řádků dat, hodnoty různých délek způsobí, že sloupce budou nezarovnané a obtížně čitelné. Pokud chcete zarovnat každý název a číslo pod konzistentním nadpisem, dejte každému poli pevnou šířku, aby sloupce zůstaly rovné bez ohledu na délku každé hodnoty.

Pokud chcete nastavit minimální šířku pole, postupujte podle výrazu s čárkou (,) a šířkou. Kladná šířka zarovná hodnotu doprava; záporná šířka ji zarovná doleva. Zkombinujte šířku a formátovací řetězec jako {expression,width:format}. Přidejte následující kód pro tisk tabulkového souhrnu:

(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

Sloupec s názvy zarovnaný doleva a číselné sloupce zarovnané doprava vytvářejí přehlednou tabulku.

Vytvořit kulturně specifický výstup

Interpolovaný řetězec ve výchozím nastavení používá aktuální kulturu. Potřebujete-li konkrétní národní prostředí, například pevný formát pro protokoly nebo národní prostředí pro účtenku, předejte do String.Create(IFormatProvider, DefaultInterpolatedStringHandler) parametr národního prostředí. Přidejte následující kód:

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

Německá účtenka používá čárku jako oddělovač desetinných míst a symbol eura. Invariantní protokolování používá tečku a žádný symbol bez ohledu na národní nastavení počítače.

Další kroky

K vložení, formátování, zarovnání a lokalizaci hodnot jste použili interpolaci řetězců. Úplnou sadu funkcí interpolace, včetně nezpracovaných řetězcových literálů, řídicích závorek a konstantních interpolovaných řetězců, najdete v článku o konceptu:

Viz také