Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
In deze zelfstudie bouwt u een kleine app op basis van bestanden waarmee een opgemaakte ordersamenvatting wordt afgedrukt. Daarnaast past u tekenreeksinterpolatie toe om waarden in te voegen in tekst, getallen en valuta op te maken, kolommen uit te lijnen en cultuurspecifieke uitvoer te produceren.
In deze zelfstudie wordt ervan uitgegaan dat u bekend bent met basisconcepten van C#. Raadpleeg Tekenreeksinterpolatie voor een overzicht per functie van de syntaxis voor tekenreeksinterpolatie.
Prerequisites
- De .NET 10 SDK of een latere versie. Voor apps op basis van bestanden is .NET 10 of hoger vereist.
- Een code-editor, zoals Visual Studio Code.
De app maken
Een app op basis van bestanden is één .cs bestand dat u zonder een projectbestand uitvoert. Maak een map voor de app en ga ernaartoe:
mkdir StringInterpolation
cd StringInterpolation
Maak een leeg bestand met de naam report.cs in die map en open het in uw editor. U voegt er code aan toe in de volgende secties en u voert de app uit met dotnet run report.cs.
Waarden invoegen in tekst
Een letterlijke $ tekenreeks vooraf laten gaan om een geïnterpoleerde tekenreeks te maken. Plaats in de tekenreeks een C#-expressie in accolades ({ en }); C# evalueert de expressie, converteert het resultaat naar een tekenreeks en voegt deze in.
Voeg de volgende code toe aan report.cs en voer vervolgens de app uit met 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.
Het resultaat combineert de letterlijke tekst met de waarden van name en itemCount.
Getallen en valuta opmaken
Een orderoverzicht toont bedragen en tarieven, dus ruwe getallen zoals 23.5 of 0.08 zien er onaf uit en zijn moeilijk te lezen. Geef elke waarde weer zoals een klant verwacht: een prijs met een valutasymbool en een belastingtarief als percentage. Maak deze op als onderdeel van de interpolatie.
Als u een waarde wilt opmaken, plaatst u na de expressie een dubbele punt (:) en een indelingsreeks. De standaardindelingsreeksen C en P0 produceren valuta's en percentages als gehele getallen. Voeg de volgende code toe aan het einde van het bestand:
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
De notatietekenreeks past de conventies van de huidige cultuur toe, zodat het valutasymbool en de scheidingstekens overeenkomen met de instellingen van de machine.
Waarden uitlijnen in kolommen
Wanneer u meerdere rijen met gegevens afdrukt, blijven de kolommen met verschillende lengten onregelmatig en moeilijk te scannen. Als u elke naam en elk getal onder een consistente kop wilt uitlijnen, geeft u elk veld een vaste breedte zodat de kolommen recht blijven, ongeacht hoe lang elke waarde is.
Als u een minimale veldbreedte wilt instellen, volgt u de expressie met een komma (,) en de breedte. Een positieve breedte lijnt de waarde rechts uit; een negatieve breedte lijnt deze links uit. Combineer breedte en een opmaaktekenreeks als {expression,width:format}. Voeg de volgende code toe om een samenvatting in tabelvorm af te drukken:
(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
De links uitgelijnde naamkolom en rechts uitgelijnde numerieke kolommen worden uitgelijnd in een leesbare tabel.
Cultuurspecifieke uitvoer produceren
Een geïnterpoleerde tekenreeks gebruikt standaard de huidige cultuur by default. Wanneer u een specifieke cultuur nodig hebt, zoals een vaste indeling voor logboeken of een landinstelling voor een ontvangstbewijs, geeft u een cultuur door aan String.Create(IFormatProvider, DefaultInterpolatedStringHandler). Voeg de volgende code toe:
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
De Duitse ontvangstbevestiging gebruikt een komma als decimaalteken en het eurosymbool. Het invariant logboek gebruikt een decimaalteken en geen symbool, ongeacht de cultuur van de machine.
Volgende stappen
U hebt tekenreeksinterpolatie gebruikt om waarden in te voegen, op te maken, uit te lijnen en te lokaliseren. Voor de volledige reeks interpolatiemogelijkheden, waaronder onbewerkte tekenreeksliteralen, geëscapete accolades en constante geïnterpoleerde tekenreeksen, zie het conceptartikel: