Använda stränginterpolation för att konstruera formaterade strängar
I den här självstudien lär du dig hur du använder stränginterpolation för att infoga värden i en enda sträng. Du får också lära dig hur du styr textformateringen för resultatsträngen. Du använder webbläsaren för att skriva och köra C#-kod och kan omedelbart se resultatet.
Skapa en interpolerad sträng
Kör följande kod i det interaktiva fönstret. Välj knappen Ange fokusläge. Skriv sedan följande kodblock i det interaktiva fönstret (ersätt <name>
med ditt namn) och välj Kör:
var name = "<name>";
Console.WriteLine($"Hello, {name}. It's a pleasure to meet you!");
När du kör koden visar Output en sträng som innehåller ditt namn i hälsningen. Strängargumentet för metodanropet WriteLine är ett interpolerat stränguttryck. Det är en sorts mall där du kan konstruera en sträng (som kallas för resultatsträngen) ur en sträng som innehåller inbäddad kod. Interpolerade stränguttryck är särskilt användbara för att infoga värden i en sträng eller sammanfoga (sammanfoga) flera strängar.
Exemplet ovan innehåller de två element som varje interpolerat stränguttryck måste ha:
En strängliteral som börjar med tecknet
$
innan det inledande citattecknet. Det får inte förekomma några blanksteg mellan symbolen$
och citattecknet. (Om du vill se vad som händer om du tar med ett infogar du ett blanksteg efter$
tecknet i det interaktiva fönstret och kör den uppdaterade koden. C#-kompilatorn klagar, "Oväntat tecken '$'".)Ett eller flera interpolationsuttryck. Ett interpolationsuttryck indikeras av en inledande och avslutande klammerparentes (
{
och}
). Du kan sätta valfritt C#-uttryck som returnerar ett värde (ävennull
) innanför klammerparenteserna.
Nu ska vi prova några fler exempel på stränginterpolering med några andra datatyper.
Ta med olika datatyper
I föregående steg använde du stränginterpolation för att infoga en sträng inuti en annan. Varje interpoleringsuttryck som ingår i ett interpolerat stränguttryck kan dock vara av valfri datatyp. Nu ska vi ta med värden för olika datatyputtryck i en interpolerad sträng.
I följande exempel definierar vi först en tuppeln som har Name
, Price
och perPackage
medlemmar. Kör följande kod i det interaktiva fönstret:
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.");
Observera att interpoleringsuttrycket item.Price
i den interpolerade strängen matchar texten "1.99" i resultatsträngen. Det beror på att när typen av uttrycksresultat inte är en sträng matchas resultatet till en sträng på följande sätt:
Om interpoleringsuttrycket utvärderas till
null
används en tom sträng ("" eller String.Empty) .Om interpolationsuttrycket inte utvärderas till
null
anropas vanligtvisToString
metoden för resultatuttrycket.
I utdata från det här exemplet är datumet för exakt (priset på aubergine ändras inte varje sekund) och prisvärdet anger inte en valutaenhet. I nästa steg får du lära dig hur du åtgärdar dessa problem genom att styra formatet för strängrepresentationer av uttrycksresultatet.
Kontrollera formateringen av interpoleringsuttryck
I föregående steg infogades två dåligt formaterade strängar i resultatsträngen. En var ett datum/tid-värde där bara datumet var relevant. Det andra var ett pris som inte angav dess valutaenhet. Båda problemen är enkla att åtgärda. Med stränginterpolation kan du ange formatsträngar som styr formateringen för vissa typer. Ändra anropet till Console.WriteLine
från föregående exempel så att formatsträngarna för datum- och prisuttrycken inkluderas enligt följande rad:
Console.WriteLine($"On {date:d}, the price of {item.Name} was {item.Price:C2} per {item.perPackage} items");
Du anger en formatsträng genom att följa interpolationsuttrycket med ett kolon (":") och formatsträngen. ”d” är en standardformatsträng för datum/tid som representerar det korta datumformatet. ”C2” är en numerisk standardformatsträng som representerar ett tal som ett valutavärde, med två siffror efter decimaltecknet.
Ett antal typer i .NET-biblioteken stöder en fördefinierad uppsättning formatsträngar. Det gäller bland annat alla numeriska typer och datum/tid-typer. En fullständig lista med alla typer som har stöd för formatsträngar finns under Format Strings and .NET Class Library Types (Formatsträngar och typer i .NET-klassbibliotek) i artikeln Formatting Types in .NET (Formatera typer i .NET).
Prova att ändra formatsträngarna i exemplet för att se hur de påverkar formateringen av datum och tid och det numeriska värdet. Ändra ”d” i {date:d}
till ”t” (om du vill visa det korta tidsformatet), ”y” (om du vill visa år och månad) och ”yyyy” (om du vill visa årtalet som ett fyrsiffrigt tal). Ändra ”C2” i {price:C2}
till ”e” (om du vill använda exponentiell notation) och ”F3” (om du vill visa ett numeriskt värde med tre siffror efter decimaltecknet).
Förutom att styra formateringen kan du även styra fältbredden och justeringen för de formaterade strängar som ingår i resultatsträngen. Det här får du lära dig i nästa steg.
Kontrollera fältbredden och justeringen för interpoleringsuttryck
Vanligtvis, när resultatet av ett interpolerat stränguttryck formateras till sträng, inkluderas strängen i en resultatsträng utan inledande eller avslutande blanksteg. Särskilt när du arbetar med en uppsättning data kan du skapa mer läsbara utdata genom att kunna styra fältbredden och textjusteringen. Om du vill se detta kör du följande 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}|");
Artikelnamnen är vänsterjusterade och kvantiteterna är högerjusterade. Du anger justeringen genom att lägga till ett kommatecken (",") efter ett interpolationsuttryck och ange den minsta fältbredden. Om det angivna värdet är ett positivt tal är fältet högerjusterat. Om det är ett negativt tal är fältet vänsterjusterat.
Försök att ta bort de negativa tecknen från {"Item",-25}
koden och {item.Key,-25}
och kör exemplet igen. Den här gången är objektnamnen högerjusterade.
Du kan kombinera en justeringsspecificerare och en formatsträng för ett enda interpolationsuttryck. För att göra det anger du justeringen först, följt av ett kolon och formatsträngen. Prova följande kod som visar tre formaterade strängar med definierade fältbredder:
Console.WriteLine($"[{DateTime.Now,-20:d}] Hour [{DateTime.Now,-10:HH}] [{1063.342,15:N2}] feet");
Grattis!
Du har slutfört den interaktiva självstudien om stränginterpolation. Du kan besöka .NET-webbplatsen för att ladda ned .NET Core SDK, skapa ett projekt på datorn och fortsätta koda.
Mer information finns i Stränginterpolation.
Har du ett problem med det här avsnittet? Ge oss då feedback så att vi kan förbättra avsnittet.