Tutorial „Interpolarea șirurilor în C#”


Acest tutorial vă arată cum să folosiți interpolarea șirurilor pentru a formata și a include rezultate de expresii într-un șir rezultat. Exemplele presupun că dvs. sunteți familiarizat cu conceptele de bază C# și formatarea tipurilor .NET. Dacă sunteți noi la interpolarea șirurilor sau formatarea tipurilor .NET, verificați tutorialul interactiv de interpolare a șirurilor mai întâi. Pentru mai multe informații despre formatarea tipurilor în .NET, vedeți subiectul Formatting Types in .NET.

Notă. Exemplele C# din acest articol rulează in interpretorul în linie și locul de joacă Try.NET. Selectați butonul Run pentru a rula un exemplu în fereastra interactivă. Odată ce dvs. ați executat codul, puteți să îl modificați și să rulați codul modificat selectând Run din nou. Codul modificat fie rulează în fereastra interactivă sau, dacă compilarea eșuează, fereastra interactivă afișează toate mesajele de eroare ale compilatorului C#.

Introducere

Facilitatea de interpolare a șirurilor este construită peste facilitatea de formatare compusă și furnizează o sintaxă mai lizibilă și mai convenientă pentru a include rezultate de expresii formatate într-un șir rezultat.

Pentru a identifica un șir literal ca un șir interpolat, precedați-l cu simbolul $. Puteți incorpora oricare expresie C# validă care întoarce un rezultat într-un șir interpolat. In exemplul următor, de îndată ce o expresie este evaluată, rezultatul ei este convertit într-un șir și inclus într-un șir rezultat:

double a = 3;
double b = 4;
Console.WriteLine($"Aria triunghiului dreptunghic cu catetele {a} si {b} este {0.5 * a * b}");
Console.WriteLine($"Lungimea ipotenuzei triunghiului dreptunghic cu catetele {a} si {b} este {CalculateHypotenuse(a, b)}");


double CalculateHypotenuse(double leg1, double leg2) => Math.Sqrt(leg1 * leg1 + leg2 * leg2);

// Iesire asteptata:
// Aria triunghiului dreptunghic cu catetele 3 si 4 este 6
// Lungimea ipotenuzei triunghiului dreptunghic cu catetele 3 si 4 este 5


După cum arată exemplul, dvs. includeți o expresie într-un șir interpolat închizându-l în acolade:

{<expresieInterpolata>}

In momentul compilării, un șir interpolat este de obicei transformat într-un apel de metodă String.Format. Aceasta face toate capabilitățile facilității de compunere formatată a șirurilor disponibile dvs. pentru a le folosi cu șirurile interpolate de asemenea.

Cum să specificați un șir de format pentru o expresie interpolată

Dvs. specificați un șir format care este suportat de tipul de expresie rezultat urmând expresia interpolată cu două puncte („:”) și șirul format:

{<expresieInterpolata>:<sirFormat>}

Exemplul următor arată cum să specificați șiruri standard și personalizate de format pentru expresii care produc rezultate dată și timp sau numerice:

var date = new DateTime(1731, 11, 25);
Console.WriteLine($"In {date:dddd, MMMM dd, yyyy} Leonhard Euler a introdus litera e sa insemne {Math.E:F5} intr-o scrisoare catre Christian Goldbach.");


// Iesire asteptata:
// In Sunday, November 25, 1731 Leonhard Euler a introdus litera e sa insemne 2.71828 intr-o scrisoare catre Christian Goldbach.

Pentru mai multe informații, vedeți secțiunea Format String Component a subiectului Composite Formatting. Acea secțiune furnizează link-uri către subiecte care descriu șiruri format standard și personalizate suportate de tipurile de bază .NET.

Cum să controlați lățimea câmpului și alinierea expresiei formatate interpolate

Dvs. specificați lățimea minimă a câmpului și alinierea rezultatului expresiei formatate urmând expresia interpolată cu o virgulă („,”) și expresia constantă:

{<expresieInterpolata>,<aliniere>}

Dacă valoarea aliniere este pozitivă, rezultatul formatat al expresiei este aliniat la dreapta; dacă e negativă, este aliniat la stânga.

Dacă trebuie să specificați și alinierea și un șir format, începeți cu componenta alinierii:

{<expresieInterpolata>,<aliniere>:<sirFormat>}

Următorul exemplu arată cum să specificați alinierea și folosește caractere bară verticală („|”) pentru a delimita câmpuri de text:

const int NameAlignment = -9;
const int ValueAlignment = 7;


double a = 3;
double b = 4;
Console.WriteLine($"Trei medii clasice pitagoreice ale lui {a} si {b}:");
Console.WriteLine($"|{"Aritmetica",NameAlignment}|{0.5 * (a + b),ValueAlignment:F3}|");
Console.WriteLine($"|{"Geometrica",NameAlignment}|{Math.Sqrt(a * b),ValueAlignment:F3}|");
Console.WriteLine($"|{"Armonica",NameAlignment}|{2 / (1 / a + 1 / b),ValueAlignment:F3}|");


// Iesire asteptata:
// Trei medii clasice pitagoreice ale lui 3 si 4:
// |Aritmetica|  3.500|
// |Geometrica|  3.464|
// |Armonica |  3.429|


După cum arată ieșirea exemplului, dacă lungimea rezultatului expresiei formatat întrece lățimea specificată a câmpului, valoarea aliniere este ignorată.

Pentru mai multe informații, vedeți secțiunea Alignment Component a subiectului Composite Formatting.

Cum să folosiți șiruri de evacuare într-un șir interpolat

Sirurile interpolate suportă toate șirurile de evacuare care pot fi folosite în șiruri literale obișnuite. Pentru mai multe informații, vedeți String escape sequences.

Pentru a interpreta șirurile de evacuare literal, folosiți un șir literal textual (en. verbatim). Un șir interpolat textual începe cu caracterul $ urmat de caracterul @.

Pentru a include o acoladă, „{” sau „}”, în șirul rezultat, folosiți două acolade, „{{” sau „}}”. Pentru mai multe informații vedeți secțiunea Escaping Braces a subiectului Composite Formatting.

Următorul exemplu arată cum să includeți acolade în șirul rezultat și să construiți un șir interpolat textual:

var xs = new int[] { 1, 2, 7, 9 };
var ys = new int[] { 7, 9, 12 };
Console.WriteLine($"Gasiti intersectia multimilor {{{string.Join(", ",xs)}}} si {{{string.Join(", ",ys)}}}.");


var userName = "Jane";
var stringWithEscapes = $"C:\\Users\\{userName}\\Documents";
var verbatimInterpolated = $@"C:\Users\{userName}\Documents";
Console.WriteLine(stringWithEscapes);
Console.WriteLine(verbatimInterpolated);


// Iesire asteptata:
// Gasiti intersectia multimilor {1, 2, 7, 9} si {7, 9, 12}.
// C:\Users\Jane\Documents
// C:\Users\Jane\Documents

Cum să folosiți operatorul condițional ternar ?: într-o expresie interpolată

După cum două puncte (":") are un înțeles special într-un element cu o expresie interpolată, pentru a folosi un operator condițional într-o expresie, închideți-o în paranteze, după cum arată exemplul următor:

var rand = new Random();
for (int i = 0; i < 7; i++)
{
    Console.WriteLine($"Aruncare cu banul: {(rand.NextDouble() < 0.5 ? "stema" : "ban")}");
}

Cum să creați șir rezultat specific unei culturi cu interpolarea șirurilor

Implicit, un șir interpolat folosește cultura curentă definită de proprietatea CultureInfo.CurrentCulture pentru toate operațiile de formatare. Folosiți conversia implicită a unui șir interpolat la o instanță System.FormattableString și apelați-i metoda ToString(IFormatProvider) pentru a crea un șir rezultat specific unei culturi. Următorul exemplu arată cum să faceți aceasta:

var cultures = new System.Globalization.CultureInfo[]
{
    System.Globalization.CultureInfo.GetCultureInfo("en-US"),
    System.Globalization.CultureInfo.GetCultureInfo("en-GB"),
    System.Globalization.CultureInfo.GetCultureInfo("nl-NL"),
    System.Globalization.CultureInfo.InvariantCulture
};


var date = DateTime.Now;
var number = 31_415_926.536;
FormattableString message = $"{date,20}{number,20:N3}";
foreach (var culture in cultures)
{
    var cultureSpecificMessage = message.ToString(culture);
    Console.WriteLine($"{culture.Name,-10}{cultureSpecificMessage}");
}


// Iesire asteptata este ca:
// en-US       5/17/18 3:44:55 PM      31,415,926.536
// en-GB      17/05/2018 15:44:55      31,415,926.536
// nl-NL        17-05-18 15:44:55      31.415.926,536
//            05/17/2018 15:44:55      31,415,926.536


După cum arată exemplul, puteți folosi o singură instanță FormattableString pentru a genera multiple șiruri rezultat pentru culturi variate.

Cum să creați un șir rezultat folosind cultura invariantă

Impreună cu metoda FormattableString.ToString(IFormatProvider), dvs. puteți folosi metoda statică FormattableString.Invariant pentru a rezolva un șir interpolat la un șir rezultat pentru InvariantCulture. Următorul exemplu arată cum să faceți aceasta:

string messageInInvariantCulture = FormattableString.Invariant($"Data si timpul in cultura invarianta: {DateTime.Now}");
Console.WriteLine(messageInInvariantCulture);


// Iesirea asteptata este ca:
// Data si timpul in cultura invarianta: 05/17/2018 15:46:24

Concluzie

Acest tutorial descrie scenarii obișnuite de utilizare a interpolării șirurilor. Pentru mai multe informații despre interpolarea șirurilor, vedeți subiectul String interpolation. Pentru mai multe informații despre formatarea tipurilor în .NET, vedeți subiectele Formatting Types in .NET și Composite formatting.

Vedeți de asemenea

Tradus din această pagină oficială de documentație Microsoft.

Niciun comentariu:

Trimiteți un comentariu