Øvelse – Undersøg grundlæggende om strengformatering
- 20 minutter
I dette undermodul lærer du, hvordan du formaterer strenge for at få effektiv visning, især i tilfælde, hvor der bruges flere variabler.
Forbered dit kodemiljø
Dette modul indeholder praktiske aktiviteter, der guider dig gennem processen med at bygge og køre demonstrationskode. Du opfordres til at fuldføre disse aktiviteter ved hjælp af Visual Studio Code som dit udviklingsmiljø. Brug af Visual Studio Code til disse aktiviteter hjælper dig med at blive mere fortrolig med at skrive og køre kode i et udviklermiljø, der bruges af fagfolk over hele verden.
Seddel
Hvis du har fuldført andre Microsoft Learn-moduler i denne C#-serie, har du måske allerede oprettet en projektmappe til kodeeksempler. Hvis det er tilfældet, kan du springe følgende afsnit af trin over og slette koden i den Project.cs fil, der blev brugt til en tidligere øvelse.
Åbn Visual Studio Code. Du kan bruge Menuen Start i Windows (eller en tilsvarende ressource for et andet operativsystem) til at åbne Visual Studio Code.
Vælg Åbn mappe i menuen Filer i Visual Studio Code.
Gå til mappen Windows Desktop i dialogboksen Åbn mappe . Hvis du har en anden mappeplacering, hvor du gemmer kodeprojekter, kan du i stedet bruge denne mappeplacering. Til denne træning er det vigtigt at have en placering, der er nem at finde og huske.
Vælg Vælg mappe i dialogboksen Åbn mappe. Hvis du får vist en sikkerhedsdialogboks, hvor du bliver spurgt, om du har tillid til forfatterne, skal du vælge Ja.
Vælg Ny terminal i menuen Visual Studio Code Terminal. Bemærk, at mappestien for den aktuelle mappe vises i en kommandoprompt i terminalpanelet. For eksempel:
C:\Users\someuser\Desktop>Ved kommandoprompten Terminal skal du skrive dotnet new console -o ./CsharpProjects/TestProject for at oprette et nyt konsolprogram i en angivet mappe og derefter trykke på Enter. Denne .NET CLI-kommando bruger en .NET-programskabelon til at oprette et nyt C#-konsolprogramprojekt på den angivne mappeplacering. Kommandoen opretter mapperne CsharpProjects og TestProject for dig og bruger TestProject som navnet på
.csprojfilen.Udvid mappen CsharpProjects i panelet EXPLORER. Du bør kunne se mappen TestProject og to filer, en C#-programfil med navnet Program.cs og en C#-projektfil med navnet TestProject.csproj.
Vælg Program.cs i panelet STIFINDER for at få vist kodefilen i editorpanelet.
Slet de eksisterende kodelinjer. Du kan bruge dette C#-konsolprojekt til at oprette, bygge og køre kodeeksempler under dette modul.
Luk terminalpanelet.
Hvad er sammensat formatering?
Sammensat formatering bruger nummererede pladsholdere i en streng. På kørselstidspunktet fortolkes alt i klammeparenteserne til en værdi, der også overføres baseret på deres position.
I dette eksempel på sammensat formatering bruges en indbygget metode Format() til nøgleordet string datatype. Opdater din kode i Visual Studio Code Editor på følgende måde:
string first = "Hello";
string second = "World";
string result = string.Format("{0} {1}!", first, second);
Console.WriteLine(result);
Hvis du kører denne kode, kan du se følgende output.
Hello World!
Der er et par vigtige ting, du skal lægge mærke til om denne kode.
- Datatyper og variabler for en given datatype har indbyggede "hjælpemetoder" for at gøre visse opgaver nemme.
- Konstantstrengen
"{0} {1}!"danner en skabelon, hvoraf dele erstattes på kørselstidspunktet. - Tokenet
{0}erstattes af det første argument efter strengskabelonen, dvs. værdien af variablenfirst. - Tokenet
{1}erstattes af det andet argument efter strengskabelonen, dvs. værdien af variablensecond.
Seddel
Du synes måske, det er mærkeligt at starte med tallet 0. Faktisk er dette meget almindeligt i softwareudvikling. Når der er en sekvens af elementer, der kan identificeres ved hjælp af et tal, starter nummereringen normalt ved 0.
Opdater din kode på følgende måde:
string first = "Hello"; string second = "World"; Console.WriteLine("{1} {0}!", first, second); Console.WriteLine("{0} {0} {0}!", first, second);Gem din kodefil, og brug derefter Visual Studio Code til at køre din kode. Du bør kunne se følgende output:
World Hello! Hello Hello Hello!
Et par bemærkninger om disse eksempler:
- I den første
Console.WriteLine()sætning skal du være opmærksom på, at tokens kan arrangeres i vilkårlig rækkefølge. Eksempelkoden har{1}før{0}. - I den anden
Console.WriteLine()sætning skal du se, at tokens kan genbruges med tre forekomster af{0}. Det andet variabelargument, ,secondbruges heller ikke. Koden kører dog stadig uden fejl.
Hvad er strenginterpolering?
Strenginterpolering er en teknik, der forenkler sammensat formatering.
I stedet for at bruge et nummereret token og medtage konstantværdien eller variabelnavnet på en liste over argumenter til String.Format() eller Console.WriteLine(), kan du blot bruge variabelnavnet i krøllede klammeparenteser.
Hvis en streng skal interpoleres, skal du præfikse den med direktivet
$. Opret nu de samme eksempler fra tidligere ved hjælp af strenginterpolering i stedet for sammensat formatering. Opdater din kode på følgende måde:string first = "Hello"; string second = "World"; Console.WriteLine($"{first} {second}!"); Console.WriteLine($"{second} {first}!"); Console.WriteLine($"{first} {first} {first}!");Gem din kodefil, og brug derefter Visual Studio Code til at køre din kode. Du bør kunne se følgende output:
Hello World! World Hello! Hello Hello Hello!
Seddel
Hvis du ser på kodeeksempler i bøger og online, vil du sandsynligvis se både sammensat formatering og strenginterpolering anvendt, men generelt bør du vælge strenginterpolering.
Formatering af valuta
Sammensat formatering og strenginterpolering kan bruges til at formatere værdier til visning med et bestemt sprog og en bestemt kultur. I følgende eksempel bruges valutaformatangivelsen :C til at vise variablerne price og discount som valuta. Opdater din kode på følgende måde:
decimal price = 123.45m;
int discount = 50;
Console.WriteLine($"Price: {price:C} (Save {discount:C})");
Hvis du har udført denne kode på en computer, hvor Windows-visningssproget er angivet til "Engelsk (USA)", kan du se følgende output.
Price: $123.45 (Save $50.00)
Bemærk, hvordan hvis du føjer :C til tokens i krøllede klammeparenteser, formateres tallet som valuta, uanset om du bruger int eller decimal.
Seddel
Hvad sker der, hvis dit land/område og sprog ikke er kendt? Hvis du kører den forrige kode i .NET Editor i browseren, f.eks. på TrydotNet , får du vist følgende output: Price: ¤123.45 (Save ¤50.00). Symbolet ¤ bruges i stedet for symbolet for dit land/områdes penge. Dette er et generisk symbol, der bruges til at angive "valuta", uanset valutatype . Du kan se dette symbol i .NET Editor, fordi det ignorerer din aktuelle placering.
Sådan påvirker brugerens land/område og sprog strengformatering
Hvad sker der, hvis du udfører den forrige kode på en computer i Frankrig, hvor Windows Display Language er indstillet til fransk? I så fald kan du se følgende output.
Price: 123,45 € (Save 50,00 €)
Årsagen til det forrige "€"-output er, at funktionen til formatering af strengvaluta er afhængig af den lokale computerindstilling for kultur. I denne sammenhæng henviser udtrykket "kultur" til slutbrugerens land/område og sprog. Kulturkoden er en streng på fem tegn, som computere bruger til at identificere slutbrugerens placering og sprog. Kulturkoden sikrer, at visse oplysninger som datoer og valuta kan præsenteres korrekt.
For eksempel:
- kulturkoden for en engelsk taler i USA er
en-US. - kulturkoden for en fransk taler i Frankrig er
fr-FR. - kulturkoden for en fransk taler i Canada er
fr-CA.
Kulturen påvirker skrivesystemet, den kalender, der bruges, sorteringsrækkefølgen af strenge og formateringen af datoer og tal (f.eks. formatering af valuta).
Det er desværre en udfordring at sikre, at din kode fungerer korrekt på alle computere, uanset land/område eller slutbrugerens sprog. Denne proces kaldes lokalisering (eller globalisering). Lokalisering afhænger af mange faktorer, der ikke er beskrevet i dette modul, men ganske enkelt kan strengformateringssyntaksen bruge et andet format, afhængigt af brugerens kultur.
Formatering af tal
Når du arbejder med numeriske data, kan det være en god idé at formatere tallet for læsbarhed ved at inkludere kommaer for at afgrænse tusinder, millioner, milliarder osv.
Den N numeriske formatangivelse gør det lettere at læse tal. Opdater din kode på følgende måde:
decimal measurement = 123456.78912m;
Console.WriteLine($"Measurement: {measurement:N} units");
Hvis du får vist dette fra en-US kulturen, kan du se følgende output.
Measurement: 123,456.79 units
Som standard viser den N numeriske formatangivelse kun to cifre efter decimaltegnet.
Hvis du vil have vist mere præcision, kan du gøre det ved at tilføje et tal efter angivelsen. Følgende kode viser fire cifre efter decimaltegnet ved hjælp af N4 angivelsen. Opdater din kode på følgende måde:
decimal measurement = 123456.78912m;
Console.WriteLine($"Measurement: {measurement:N4} units");
Hvis du får vist dette fra en-US kulturen, kan du se følgende output.
Measurement: 123,456.7891 units
Formateringsprocenter
Brug formatangivelsen P til at formatere procenter og afrunder til 2 decimaler. Tilføj et tal bagefter for at styre antallet af værdier, der vises efter decimaltegnet. Opdater din kode på følgende måde:
decimal tax = .36785m;
Console.WriteLine($"Tax rate: {tax:P2}");
Hvis du får vist dette fra en-US kulturen, kan du se følgende output.
Tax rate: 36.79%
Kombination af formateringsmetoder
Strengvariabler kan gemme strenge, der er oprettet ved hjælp af formateringsteknikker. I følgende eksempel formateres og gemmes decimaler og matematiske decimaler i strengen yourDiscount ved hjælp af sammensat formatering.
Opdater din kode på følgende måde.
decimal price = 67.55m;
decimal salePrice = 59.99m;
string yourDiscount = String.Format("You saved {0:C2} off the regular {1:C2} price. ", (price - salePrice), price);
Console.WriteLine(yourDiscount);
Hvis du får vist dette fra en-US kulturen, kan du se følgende output.
You saved $7.56 off the regular $67.55 price.
Du kan kombinere flere formaterede strenge. Byg på den forrige kode, der sammenkæder den beregnede procentdel ved hjælp af strenginterpolering i stedet for strengsammenkædning ved at yourDiscount += $"A discount of {(price - salePrice)/price:P2}!"; indsætte i koden på linjen før Console.WriteLine().
Seddel
Du behøver ikke at bruge String.Format() med denne strenginterpoleringstilgang.
Opdater din kode på følgende måde.
decimal price = 67.55m;
decimal salePrice = 59.99m;
string yourDiscount = String.Format("You saved {0:C2} off the regular {1:C2} price. ", (price - salePrice), price);
yourDiscount += $"A discount of {((price - salePrice)/price):P2}!"; //inserted
Console.WriteLine(yourDiscount);
Hvis du får vist dette undermodul fra en-US kulturen, kan du se følgende output.
You saved $7.56 off the regular $67.55 price. A discount of 11.19%!
Resumé
Her er de vigtigste elementer fra dette undermodul om strengformatering:
- Du kan bruge sammensat formatering eller strenginterpolering til at formatere strenge.
- Med sammensat formatering kan du bruge en strengskabelon, der indeholder et eller flere erstatningstokens i formularen
{0}. Du kan også angive en liste over argumenter, der matches med erstatningstokens baseret på deres rækkefølge. Sammensat formatering fungerer, når du brugerstring.Format()ellerConsole.WriteLine(). - Med strenginterpolering bruger du en strengskabelon, der indeholder de variabelnavne, du vil erstatte omgivet af krøllede klammeparenteser. Brug direktivet
$før strengskabelonen til at angive, at strengen skal interpoleres. - Formatér valuta ved hjælp af en
:Cspecifikation. - Formatér tal ved hjælp af en
:Nspecifikation. Kontrollér præcisionen (antallet af værdier efter decimaltegnet) ved hjælp af et tal efter lignende:N{myNumber:N3}. - Formatér procenter ved hjælp af
:Pformatangivelsen. - Formatering af valuta og tal afhænger af slutbrugerens kultur, en kode på fem tegn, der indeholder brugerens land/område og sprog (pr. indstillingerne på computeren).