Tekenreeksinterpolatie gebruiken om opgemaakte tekenreeksen samen te stellen
In deze zelfstudie leert u hoe u tekenreeksinterpolatie gebruikt om waarden in één tekenreeks in te voegen. U leert ook hoe u de tekstopmaak van de resultaattekenreeks kunt beheren. U gebruikt uw browser om C#-code te schrijven en uit te voeren en de resultaten direct te zien.
Een geïnterpoleerde tekenreeks maken
Voer de volgende code uit in het interactieve venster. Selecteer de knop Focusmodus invoeren. Typ vervolgens het volgende codeblok in het interactieve venster (vervang door <name>
uw naam) en selecteer Uitvoeren:
var name = "<name>";
Console.WriteLine($"Hello, {name}. It's a pleasure to meet you!");
Wanneer u de code uitvoert, wordt in uitvoer een tekenreeks weergegeven die uw naam in de begroeting bevat. Het tekenreeksargument van de WriteLine methodeaanroep is een geïnterpoleerde tekenreeksexpressie. Het betreft een soort sjabloon waarmee u een enkele tekenreeks construeert (die resultaattekenreeks wordt genoemd) uit een tekenreeks waarin ingesloten code is opgenomen. Geïnterpoleerde tekenreeksexpressies zijn met name handig voor het invoegen van waarden in een tekenreeks of het samenvoegen (samenvoegen) van verschillende tekenreeksen.
Het bovenstaande voorbeeld bevat de twee elementen die elke geïnterpoleerde tekenreeksexpressie moet hebben:
Een letterlijke tekenreeks begint met het
$
-teken vóór het aanhalingsteken openen. Er mogen zich geen spaties bevinden tussen het$
-symbool en het aanhalingsteken. (Als u wilt zien wat er gebeurt als u er een opneemt, voegt u een spatie in na het$
teken in het interactieve venster en voert u de bijgewerkte code uit. De C#-compiler klaagt over 'Onverwacht teken '$'.)Een of meer interpolatie-expressies. Een interpolatie-expressie wordt aangegeven met een accolade openen en sluiten (
{
en}
). U kunt elke gewenste C#-expressie waarmee een waarde wordt geretourneerd (inclusiefnull
) binnen de accolades plaatsen.
Laten we nog enkele voorbeelden van tekenreeksinterpolatie proberen met enkele andere gegevenstypen.
Verschillende gegevenstypen opnemen
In de vorige stap hebt u tekenreeksinterpolatie gebruikt om een tekenreeks in een andere tekenreeks in te voegen. Elke interpolatie-expressie die deel uitmaakt van een geïnterpoleerde tekenreeksexpressie kan echter van elk gegevenstype zijn. Laten we waarden van verschillende expressies voor gegevenstypen opnemen in een geïnterpoleerde tekenreeks.
In het volgende voorbeeld definiëren we eerst een tuple met Name
, Price
en perPackage
leden. Voer de volgende code uit in het interactieve venster:
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.");
De interpolatie-expressie item.Price
in de geïnterpoleerde tekenreeks wordt omgezet in de tekst '1,99' in de resultaattekenreeks. Dat komt doordat, wanneer het type expressieresultaat geen tekenreeks is, het resultaat op de volgende manier wordt omgezet in een tekenreeks:
Als de interpolatie-expressie resulteert in
null
een lege tekenreeks ("", of String.Empty) wordt gebruikt.Als de interpolatie-expressie niet evalueert
null
, wordt meestal deToString
methode van de resultaatexpressie aangeroepen.
In de uitvoer uit dit voorbeeld is de datum te nauwkeurig (de prijs van aubergine verandert niet elke seconde) en de prijswaarde geeft geen valuta-eenheid aan. In de volgende stap leert u hoe u deze problemen kunt oplossen door de indeling van tekenreeksweergaven van de expressieresultaten te beheren.
De opmaak van interpolatie-expressies beheren
In de vorige stap zijn twee slecht opgemaakte tekenreeksen ingevoegd in de resultaattekenreeks. Een betrof een datum- en tijdwaarde waarvoor alleen de datum geschikt was. De tweede was een prijs die niet de valuta-eenheid aangeeft. Beide problemen zijn eenvoudig te verhelpen. Met tekenreeksinterpolatie kunt u opmaaktekenreeksen opgeven waarmee de opmaak van bepaalde typen wordt bepaald. Wijzig de aanroep van Console.WriteLine
het vorige voorbeeld om de notatietekenreeksen voor de datum- en prijsexpressies op te nemen, zoals wordt weergegeven in de volgende regel:
Console.WriteLine($"On {date:d}, the price of {item.Name} was {item.Price:C2} per {item.perPackage} items");
U geeft een notatietekenreeks op door de interpolatie-expressie te volgen met een dubbele punt (:) en de notatietekenreeks. d is een standaard opmaaktekenreeks voor de datum en de tijd die de korte datumnotatie weergeeft. C2 is een standaard numerieke opmaaktekenreeks die een getal als valutawaarde met twee decimalen achter de komma weergeeft.
Een aantal typen in de .NET-bibliotheken ondersteunen een vooraf gedefinieerde set opmaaktekenreeksen. Hierbij zijn alle numerieke typen en datum- en tijdtypen inbegrepen. Zie Opmaaktekenreeksen en .NET-klassebibliotheektypen in het artikel Types opmaken in .NET voor een volledige lijst met typen die ondersteuning bieden aan opmaaktekenreeksen.
Wijzig de notatietekenreeksen in het voorbeeld om te zien hoe deze van invloed zijn op de opmaak van de datum en tijd en de numerieke waarde. Wijzig de d in {date:d}
in t (om de korte tijdnotatie weer te geven), y (om het jaar en de maand weer te geven) en jjjj (om het jaar als een viercijferig getal weer te geven). Wijzig de C2 in {price:C2}
in e (voor een exponentiële notatie) en F3 (voor een numerieke waarde met drie decimalen achter de komma).
Naast het beheren van opmaak kunt u ook de veldbreedte en uitlijning van de opgemaakte tekenreeksen beheren die zijn opgenomen in de resultaattekenreeks. In de volgende stap leert u hoe u dit moet doen.
De veldbreedte en uitlijning van interpolatie-expressies bepalen
Normaal gesproken, wanneer het resultaat van een geïnterpoleerde tekenreeksexpressie is opgemaakt naar tekenreeks, wordt deze tekenreeks opgenomen in een resultaattekenreeks zonder voorloop- of volgspaties. Met name wanneer u met een set gegevens werkt, kunt u een veldbreedte en tekstuitlijning beheren om een beter leesbare uitvoer te produceren. Voer de volgende code uit om dit te zien:
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}|");
De itemnamen zijn links uitgelijnd en de bijbehorende hoeveelheden rechts uitgelijnd. U geeft de uitlijning op door een komma (",") toe te voegen na een interpolatie-expressie en de minimale veldbreedte aan te geven. Als de opgegeven waarde een positief getal is, wordt het veld rechts uitgelijnd. Als het een negatief getal is, wordt het veld links uitgelijnd.
Verwijder de negatieve tekens uit de {"Item",-25}
code en {item.Key,-25}
voer het voorbeeld opnieuw uit. Deze keer worden de itemnamen rechts uitgelijnd.
U kunt een uitlijningsaanduiding en een notatietekenreeks voor één interpolatie-expressie combineren. Hiertoe geeft u eerst de uitlijning op, gevolgd door een dubbele punt en de notatietekenreeks. Probeer de volgende code met drie opgemaakte tekenreeksen met gedefinieerde veldbreedten:
Console.WriteLine($"[{DateTime.Now,-20:d}] Hour [{DateTime.Now,-10:HH}] [{1063.342,15:N2}] feet");
Gefeliciteerd
U hebt de interactieve zelfstudie voor tekenreeksinterpolatie voltooid. U kunt de .NET-site bezoeken om de .NET Core SDK te downloaden, een project op uw computer te maken en codering te behouden.
Zie Tekenreeksinterpolatie voor meer informatie.
Is er een probleem met deze sectie? Als dit het geval is, kunt u ons feedback geven zodat we deze sectie kunnen verbeteren.