Używanie interpolacji ciągów do konstruowania sformatowanych ciągów
W tym samouczku pokazano, jak używać interpolacji ciągów do wstawiania wartości do pojedynczego ciągu. Dowiesz się również, jak kontrolować formatowanie tekstu ciągu wynikowego. Używasz przeglądarki do pisania i uruchamiania kodu w języku C#, a wyniki są natychmiast widoczne.
Tworzenie ciągu interpolowanego
Uruchom poniższy kod w oknie interaktywnym. Wybierz przycisk Enter focus mode (Wprowadź tryb koncentracji uwagi). Następnie wpisz następujący blok kodu w oknie interaktywnym (zastąp <name>
ciąg nazwą) i wybierz pozycję Uruchom:
var name = "<name>";
Console.WriteLine($"Hello, {name}. It's a pleasure to meet you!");
Po uruchomieniu kodu dane wyjściowe wyświetlają ciąg zawierający twoje imię i nazwisko w powitaniu. Argument ciągu wywołania WriteLine metody jest wyrażeniem ciągu interpolowanego. Jest to rodzaj szablonu, który umożliwia skonstruowanie pojedynczego ciągu (zwanego ciągiem wynikowym) z ciągu obejmującego osadzony kod. Wyrażenia ciągów interpolowanych są szczególnie przydatne do wstawiania wartości do ciągu lub łączenia (łączenia ze sobą) kilku ciągów.
Powyższy przykład zawiera dwa elementy, które musi zawierać każde wyrażenie ciągu interpolowanego:
Literał ciągu rozpoczynający się od znaku
$
przed otwierającym znakiem cudzysłowu. Pomiędzy symbolem$
i znakiem zapytania nie może być żadnych odstępów. (Jeśli chcesz zobaczyć, co się stanie, jeśli go dołączysz, wstaw spację po$
znaku w oknie interaktywnym i uruchom zaktualizowany kod. Kompilator języka C# zgłasza błąd "Nieoczekiwany znak '$'".Co najmniej jedno wyrażenie interpolacji. Wyrażenie interpolacji jest wskazywane przez nawias klamrowy otwierający i zamykający (
{
i}
). Do nawiasów klamrowych możesz wstawić dowolne wyrażenie języka C# zwracające wartość (w tymnull
).
Wypróbujmy jeszcze kilka przykładów interpolacji ciągów z innymi typami danych.
Uwzględnianie innych typów danych
W poprzednim kroku użyto interpolacji ciągów, aby wstawić jeden ciąg wewnątrz innego. Każde wyrażenie interpolacji będące częścią wyrażenia ciągu interpolowanego może mieć dowolny typ danych. Uwzględnijmy wartości różnych wyrażeń typów danych w ciągu interpolowanym.
W poniższym przykładzie najpierw definiujemy krotkę z elementami Name
, Price
i perPackage
elementami członkowskimi. Uruchom następujący kod w oknie interaktywnym:
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.");
Należy pamiętać, że wyrażenie item.Price
interpolacji w ciągu interpolowanym jest rozpoznawane jako tekst "1.99" w ciągu wynikowym. Dzieje się tak, ponieważ gdy typ wyniku wyrażenia nie jest ciągiem, wynik jest rozpoznawany jako ciąg w następujący sposób:
Jeśli wyrażenie interpolacji zwróci wartość
null
, zostanie użyty pusty ciąg (""lub String.Empty).Jeśli wyrażenie interpolacji nie daje wartości
null
, zazwyczajToString
wywoływana jest metoda wyrażenia wynikowego.
W danych wyjściowych z tego przykładu data jest zbyt precyzyjna (cena bakłażana nie zmienia się co sekundę), a wartość ceny nie wskazuje jednostki waluty. W następnym kroku dowiesz się, jak rozwiązać te problemy, kontrolując format reprezentacji ciągu wyników wyrażenia.
Kontrolowanie formatowania wyrażeń interpolacji
W poprzednim kroku do ciągu wynikowego wstawiono dwa źle sformatowane ciągi. Jednym z nich była wartość daty i godziny, chociaż tylko data powinna mieć zastosowanie. Drugi był ceną, która nie wskazywała swojej jednostki waluty. Oba problemy można z łatwością rozwiązać. Interpolacja ciągów umożliwia określenie ciągów formatu, które kontrolują formatowanie określonych typów. Zmodyfikuj wywołanie elementu Console.WriteLine
z poprzedniego przykładu, aby uwzględnić ciągi formatu dla wyrażeń daty i ceny, jak pokazano w następującym wierszu:
Console.WriteLine($"On {date:d}, the price of {item.Name} was {item.Price:C2} per {item.perPackage} items");
Należy określić ciąg formatu, postępując zgodnie z wyrażeniem interpolacji dwukropkiem (":") i ciągiem formatu. „d” jest standardowym ciągiem formatu daty i godziny, który reprezentuje krótki format daty. „C2” to standardowy ciąg formatu numerycznego, który reprezentuje liczbę jako wartość waluty z dwoma cyframi po separatorze dziesiętnym.
Wiele typów w bibliotekach .NET obsługuje wstępnie zdefiniowany zestaw ciągów formatu. Uwzględnia to wszystkie typy numeryczne oraz typy daty i godziny. Aby uzyskać kompletną listę typów, które obsługują ciągi formatu, zobacz Ciągi formatu i typy biblioteki klas .NET w artykule Typy formatowania na platformie .NET.
Spróbuj zmodyfikować ciągi formatu w przykładzie, aby zobaczyć, jak wpływają one na formatowanie daty i godziny oraz wartości liczbowej. Zmień „d” w ciągu {date:d}
na „t” (aby wyświetlić krótki format daty), „y” (aby wyświetlić rok i miesiąc) oraz „yyyy” (aby wyświetlać rok jako liczbę czterocyfrową). Zmień „C2” w ciągu {price:C2}
na „e” (notacja wykładnicza) oraz „F3” (wartość numeryczna z trzema cyframi po separatorze dziesiętnym).
Oprócz kontrolowania formatowania można również kontrolować szerokość pola i wyrównanie sformatowanych ciągów, które są zawarte w ciągu wynikowym. W kolejnym kroku dowiesz się, jak to zrobić.
Kontrolowanie szerokości pola i wyrównania wyrażeń interpolacji
Zwykle, gdy wynik wyrażenia ciągu interpolowanego jest sformatowany na ciąg, ciąg ten jest uwzględniany w ciągu wynikowym bez spacji wiodących lub końcowych. Szczególnie w przypadku pracy z zestawem danych możliwość kontrolowania szerokości pola i wyrównania tekstu pomaga wygenerować bardziej czytelne dane wyjściowe. Aby to zobaczyć, uruchom następujący kod:
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}|");
Nazwy elementu są wyrównywane do lewej, a ich ilości są wyrównywane do prawej. Wyrównanie można określić, dodając przecinek (",") po wyrażeniu interpolacji i wyznaczając minimalną szerokość pola. Jeśli określona wartość jest liczbą dodatnią, pole jest wyrównane do prawej. Jeśli jest to liczba ujemna, pole jest wyrównane do lewej.
Spróbuj usunąć znaki ujemne z kodu {"Item",-25}
i i {item.Key,-25}
i ponownie uruchomić przykład. Tym razem nazwy elementów są wyrównane do prawej.
Można połączyć specyfikator wyrównania i ciąg formatu dla pojedynczego wyrażenia interpolacji. Aby to zrobić, najpierw określ wyrównanie, a następnie dwukropek i ciąg formatu. Wypróbuj następujący kod, który wyświetla trzy sformatowane ciągi ze zdefiniowanymi szerokościami pól:
Console.WriteLine($"[{DateTime.Now,-20:d}] Hour [{DateTime.Now,-10:HH}] [{1063.342,15:N2}] feet");
Gratulacje!
Ukończono interaktywny samouczek interpolacji ciągów. Możesz odwiedzić witrynę platformy .NET, aby pobrać zestaw .NET Core SDK, utworzyć projekt na maszynie i kontynuować kodowanie.
Aby uzyskać więcej informacji, zobacz Interpolacja ciągów.
Widzisz problem w tej sekcji? W takim przypadku prześlij opinię, abyśmy mogli udoskonalić tę sekcję.