Vytvoření formátovaných řetězců pomocí interpolace řetězců
V tomto kurzu se naučíte, jak pomocí interpolace řetězců vložit hodnoty do jednoho řetězce. Naučíte se také řídit formátování textu výsledného řetězce. V prohlížeči můžete psát a spouštět kód jazyka C# a okamžitě zobrazit výsledky.
Vytvoření interpolovaného řetězce
Spusťte v interaktivním okně následující kód. Vyberte tlačítko Pro zadání detailního režimu . Potom do interaktivního okna zadejte následující blok kódu (nahraďte <name>
svým jménem) a vyberte Spustit:
var name = "<name>";
Console.WriteLine($"Hello, {name}. It's a pleasure to meet you!");
Při spuštění kódu zobrazí výstup řetězec, který obsahuje vaše jméno v pozdravu. Řetězcový argument WriteLine volání metody je interpolovaný řetězcový výraz. Jedná se o druh šablony, který umožňuje vytvořit jeden řetězec (označovaný jako výsledný řetězec) z řetězce obsahujícího vložený kód. Interpolované řetězcové výrazy jsou užitečné zejména pro vložení hodnot do řetězce nebo zřetězení (spojení) několika řetězců.
Výše uvedený příklad obsahuje dva prvky, které musí mít každý interpolovaný řetězcový výraz:
Řetězcový literál, který začíná znakem
$
před počátečním znakem uvozovek. Mezi symbolem$
a znakem uvozovek nesmí být žádné mezery. (Pokud chcete zjistit, co se stane, když ho zahrnete, vložte za znak v interaktivním okně mezeru$
a spusťte aktualizovaný kód. Kompilátor jazyka C# si stěžuje na neočekávaný znak $.)Jeden nebo více interpolačních výrazů Interpolační výraz je označen levou a pravou složenou závorkou (
{
a}
). Do složených závorek můžete vložit libovolný výraz v C#, který vrací hodnotu (včetně hodnotynull
).
Pojďme vyzkoušet několik dalších příkladů interpolace řetězců s některými dalšími datovými typy.
Zahrnutí různých datových typů
V předchozím kroku jste použili interpolaci řetězců k vložení jednoho řetězce uvnitř druhého. Každý interpolační výraz, který je součástí interpolovaného řetězcového výrazu, ale může mít libovolný datový typ. Pojďme do interpolovaného řetězce zahrnout hodnoty různých výrazů datového typu.
V následujícím příkladu nejprve definujeme řazenou kolekci členů, která obsahuje Price
Name
, a perPackage
členy. V interaktivním okně spusťte následující kód:
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.");
Všimněte si, že interpolační výraz item.Price
v interpolovaném řetězci se překládá na text "1,99" ve výsledném řetězci. Je to proto, že pokud typ výsledku výrazu není řetězec, výsledek se přeloží na řetězec následujícím způsobem:
Pokud se interpolační výraz vyhodnotí jako
null
, použije se prázdný řetězec ("", nebo String.Empty).Pokud se interpolační výraz nevyhodnotí jako
null
, obvykleToString
se volá metoda výsledného výrazu.
Ve výstupu z tohoto příkladu je datum příliš přesné (cena lilek se nemění každou sekundu) a hodnota ceny neukazuje jednotku měny. V dalším kroku se dozvíte, jak tyto problémy vyřešit tím, že řídíte formát řetězcových reprezentací výsledků výrazu.
Řízení formátování interpolačních výrazů
V předchozím kroku byly do výsledného řetězce vloženy dva špatně formátované řetězce. Jedním byla hodnota data a času, ze které potřebujeme zachovat jenom datum. Druhá byla cena, která neukazovala její jednotku měny. Oba problémy můžeme snadno vyřešit. Interpolace řetězců umožňuje zadat formátovací řetězce , které řídí formátování konkrétních typů. Upravte volání Console.WriteLine
z předchozího příkladu tak, aby zahrnovalo formátovací řetězce pro výrazy data a ceny, jak je znázorněno na následujícím řádku:
Console.WriteLine($"On {date:d}, the price of {item.Name} was {item.Price:C2} per {item.perPackage} items");
Řetězec formátu zadáte podle interpolačního výrazu s dvojtečkami (":") a řetězcem formátu. „d“ je standardní formátovací řetězec data a času, který představuje krátký formát data. „C2“ je standardní číselný formátovací řetězec, který představuje číslo jako hodnotu měny se dvěma číslicemi za desetinnou čárkou.
Řada typů v knihovnách .NET podporuje předdefinovanou sadu formátových řetězců. Mezi ně patří i všechny číselné typy a typy data a času. Úplný seznam typů podporujících formátovací řetězce najdete v části Formátovací řetězce a typy v knihovně tříd .NET v článku Formátovací typy v rozhraní .NET.
Zkuste upravit formátovací řetězce v příkladu, abyste viděli, jak ovlivňují formátování data a času a číselné hodnoty. Ve výrazu {date:d}
změňte „d“ na „t“ (zobrazí se krátký formát času), „y“ (zobrazí se rok a měsíc) a „yyyy“ (zobrazí se rok v podobě čtyřmístného čísla). Ve výrazu {price:C2}
změňte „C2“ na „e“ (zobrazí se exponenciální tvar čísla) a „F3“ (zobrazí se číselná hodnota se třemi číslicemi za desetinnou čárkou).
Kromě řízení formátování můžete také řídit šířku pole a zarovnání formátovaných řetězců, které jsou součástí výsledného řetězce. V dalším kroku se dozvíte, jak na to.
Řízení šířky pole a zarovnání interpolačních výrazů
Obvykle platí, že pokud je výsledek interpolovaného řetězcového výrazu naformátovaný na řetězec, je tento řetězec součástí výsledného řetězce bez počátečních nebo koncových mezer. Zvláště když pracujete se sadou dat, schopnost řídit šířku pole a zarovnání textu pomáhá vytvořit čitelnější výstup. Pokud to chcete zobrazit, spusťte následující kód:
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}|");
Názvy položek jsou zarovnané vlevo a jejich množství jsou zarovnaná vpravo. Zarovnání zadáte tak, že za interpolační výraz přidáte čárku (",") a určíte minimální šířku pole. Pokud je zadaná hodnota kladné číslo, je pole zarovnané doprava. Pokud se jedná o záporné číslo, je pole zarovnané doleva.
Zkuste odebrat záporná znaménka a {"Item",-25}
{item.Key,-25}
kód a spusťte příklad znovu. Tentokrát jsou názvy položek zarovnané doprava.
Můžete kombinovat specifikátor zarovnání a formátovací řetězec pro jeden interpolační výraz. Uděláte to tak, že nejprve zadáte zarovnání, za kterým následuje dvojtečka a formátovací řetězec. Vyzkoušejte následující kód, který zobrazí tři formátované řetězce s definovanými šířkami polí:
Console.WriteLine($"[{DateTime.Now,-20:d}] Hour [{DateTime.Now,-10:HH}] [{1063.342,15:N2}] feet");
Gratulujeme!
Dokončili jste interaktivní kurz interpolace řetězců. Na webu .NET si můžete stáhnout sadu .NET Core SDK, vytvořit projekt na počítači a pokračovat v kódování.
Další informace naleznete v tématu Interpolace řetězců.
Máte s touto částí nějaké problémy? Pokud ano, dejte nám prosím vědět, abychom tuto část mohli vylepšit.