Pornire rapidă „Interpolarea șirurilor de caractere în C#”

Interpolarea șirurilor de caractere în C#

Această pornire rapidă vă învață să folosiți interpolarea șirurilor de caractere pentru a insera valori într-un singur șir de caractere. Învățați de asemenea cum să controlați reprezentările textuale ale acestor valori în șirul rezultat. Folosiți browser-ul dvs. pentru a scrie și rula cod C# și puteți să vedeți imediat rezultatele produse.

Creați un șir interpolat

Rulați următorul cod în fereastra interactivă. Pentru a face asta, tastați codul în fereastra interactivă (înlocuiți <nume> cu numele dvs.) și selectați Run:

var nume = "<nume>";
Console.WriteLine($"Buna ziua, {nume}. Este o placere sa va intalnesc!");


Când rulați codul, Output afișează un șir care include numele dvs. în salutare. Argumentul șir al apelului metodei WriteLine este un șir interpolat. Este un fel de șablon care vă permite să construiți un singur șir (numit șir rezultat) dintr-un șir care include cod incorporat. Șirurile interpolate sunt în special folositoare pentru inserarea de valori într-un șir sau concatenarea (alipirea) câtorva șiruri.

Exemplul de mai sus conține cele 2 elemente pe care oricare șir interpolat trebuie să le aibă:
  • Un șir literal care începe cu caracterul $ înainte de ghilimelele lui de deschidere. Nu poate fi nici un spațiu între simbolul $ și caracterul de ghilimele. (Dacă doriți săvedeți ce se întâmplă când includeți unul, inserați un spațiu după caracterul $ în fereastra interactivă și rulați codul actualizat. Compilatorul C# se plânge, „Unexpected character '$'" - „Caracter neașteptat '$'”.)
  • Unul sau mai multe expresii interpolate. O expresie interpolată este indicată de o acoladă deschisă și de o acoladă închisă ({ și }). Puteți pune orice expresie C# care întoarce o valoare (inclusiv null) între acolade.
Haideți să încercăm puțin mai multe exemple de interpolare de șiruri cu câteva alte tipuri de date.

Includeți diferite tipuri de date

În pasul anterior, ați folosit interpolarea șirurilor pentru a insera un șir în interiorul altuia. Rezultatul unei expresii interpolate poate fi de orice tip de date, totuși. Haideți să includem valori de variate tipuri de date într-un șir interpolat.

În exemplul următor, mai întâi, definim un tip de date clasă Leguma care are proprietatea Nume și metoda ToString, care suprascrie comportamentul metodei Object.ToString(). Modificatorul de acces public face acea metodă disponibilă oricărui cod client pentru a obține o reprezentare de tip șir de caractere a unei instanțe Leguma. În exemplul acesta metoda Leguma.ToString întoarce valoarea proprietății Nume care este inițializată în constructorul Leguma: Leguma(string nume) => Nume = nume;. Apoi creăm o instanță a clasei Leguma folosind cuvântul cheie new și oferind un parametru nume pentru constructorul Leguma. În final, includem acea instanță într-un șir interpolat care conține și o valoarea DateTime, o valoare Decimal, și o valoare din enumerația Unit. Rulați următorul cod în fereastra interactivă:

public class Leguma
{
   public Leguma(string nume) => Nume = nume;

   public string Nume { get; }
   public override string ToString() => Nume;
}

public enum Unit { bucata, kilogram, gram, duzina };
var item = new Leguma("vinete");
var date = DateTime.Now;
var price = 1.99m;
var unit = Unit.bucata;
Console.WriteLine($"In {date}, pretul a {item} a fost {price} pe {unit}.");


Notați că expresia interpolată item în șirul interpolat se rezolvă cu textul „vinete” în șirul rezultat. Aceasta este deoarece, când tipul expresiei rezultat nu este șir de caractere, rezultatul se rezolvă cu un șir de caractere în felul următor:
  • Dacă expresia interpolată se evaluează la null, un șir gol ("", sau String.Empty) este folosit.
  • Dacă expresia interpolată nu se evaluează la null, în mod obișnuit metoda ToString a tipului rezultat este apelată. Puteți testa aceasta actualizând implementarea metodei Leguma.ToString. Poate nici nu este nevoie să implementați metoda ToString fiindcă fiecare tip are o implementare a acestei metode. Pentru a testa aceasta, comentați definiția metodei Leguma.ToString în exemplul dat (pentru a face aceasta, puneți un simbol de comentariu, //, în fața ei). În ieșire, șirul "vinete" este înlocuit de numele de tip complet calificat (domeniul de nume (en. namespace) definit de REPL-ul C# împreună cu numele de tip), care este comportamentul implicit al metodei Object.ToString(). Comportamentul implicit al metodei ToString pentru o valoare enumerație este să întoarcă reprezentarea ca șir de caractere a valorii.
În ieșirea de la acest exemplu, data este prea precisă (prețul unei vinete nu se schimbă în fiecare secundă), și valoarea prețului nu indică o monedă. În următorul pas, veți învăța cum să rezolvați aceste probleme controlând formatul reprezentărilor șir ale rezultatelor expresiilor.

Controlați formatarea expresiilor interpolate

În pasul anterior, două șiruri sărac formatate au fost introduse în șirul rezultat. Una a fost o valoare dată și timp pentru care doar data era potrivită. A doua a fost un preț care nu își indica moneda. Ambele probleme sunt ușor de adresat. Interpolarea șirurilor vă permite să specificați șiruri de format care controlează formatarea tipurilor particulare. Modificați apelul la Console.WriteLine din exemplul anterior să includă șirurile de format pentru expresiile datei și prețului după cum se arată în următoarea linie:

Console.WriteLine($"In {date:d}, pretul a {item} a fost {price:C2} pe {unit}.");

Specificați un șir de format urmând expresia interpolată cu două-puncte („:”) și șirul de format. „d” este un șir de format standard pentru dată și timp care reprezintă formatul de dată scurtă. „C2” este un șir de format standard numeric care reprezintă un număr ca o valoare monetară cu 2 cifre după punctul zecimal.

Un număr de tipuri din bibliotecile .NET suportă o mulțime predefinită de șiruri de format. Acestea includ toate tipurile numerice și tipurile dată și timp. Pentru o listă completă de tipuri care suportă șiruri de format, vedeți Format Strings and .NET Class Library Types (tradus: Șiruri de format și tipuri din biblioteca de clase .NET) în articolul Formatting Types in .NET (tradus: Formatarea tipurilor în .NET).

Încercați să modificați șirurile de format în exemplul dat pentru a vedea cum afectează ele formatarea valorii dată și timp și a valorii numerice. Schimbați „d”-ul din {date:d} în „t” (pentru a afișa formatul scurt de timp), „y” (pentru a afișa anul și luna), și „yyyy” (pentru a afișa anul ca un număr alcătuit din 4 cifre). Schimbați „C2”-ul din {price:C2} în „e” (pentru notație exponențială) și „F3” (pentru o valoare numerică cu 3 cifre după punctul zecimal).

În plus pe lângă controlul formatării, puteți de asemenea să controlați lățimea câmpului și alinierea șirurilor formatate care sunt incluse în șirul rezultat. În următorul pas, veți învăța cum sa faceți aceasta.

Controlați lățimea câmpului și alinierea expresiilor interpolate

De obicei, când rezultatul unei expresii interpolate este formatată ca șir, acel șir este inclus în șirul rezultat fără spații în față sau în spate. În particular când lucrați cu un set de date, a fi capabil să controlați lățimea câmpului și alinierea textului ajută la producerea unei ieșiri mai lizibile. Pentru a vedea aceasta, rulați următorul cod:

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}|");

Numele item-urilor sunt aliniate la stânga, și cantitățile lor sunt aliniate la dreapta. Specificați alinierea adăugând o virgulă („,”) după o expresie interpolată și desemnând lățimea minimă a câmpului. Dacă valoarea specificată este un număr pozitiv, câmpul este aliniat la dreapta. Dacă este un număr negativ, câmpul este aliniat la stânga.

Încercați să ștergeți semnele minus din cod {"Item",-25} și {item.Key,-25} și rulați exemplul din nou. De această dată, item-urile sunt aliniate la dreapta.

Puteți combina un specificator de aliniere și un șir de format pentru o singură expresie interpolată. Pentru a face aceasta, specificați alinierea mai întâi, urmată de două-puncte și de șirul de format. Încercați următorul cod care afișează 3 șiruri formatate cu lățimi de câmp definite:

Console.WriteLine($"[{DateTime.Now,-20:d}] Hour [{DateTime.Now,-10:HH}] [{1063.342,15:N2}] feet");

Felicitări!

Ați finalizat pornirea rapidă despre interpolarea șirurilor.

Pentru mai multe informații, vedeți subiectul String interpolation (tradus: Interpolarea șirurilor) și tutorialul String interpolation in C#.

Niciun comentariu:

Trimiteți un comentariu