Sztring interpolációja $

A $ karakter interpolált sztringként azonosít egy sztringkonstanst. Az interpolált sztring olyan sztringkonstans, amely interpolációs kifejezéseket tartalmazhat. Ha egy interpolált sztring eredménysztringre van feloldva, az interpolációs kifejezéseket tartalmazó elemek helyébe a kifejezés eredményeinek sztring-ábrázolásai lépnek.

A sztringek interpolációja olvashatóbb, kényelmesebb szintaxist biztosít a sztringek formázásához. Könnyebben olvasható, mint a sztringek összetett formázása. Az alábbi példa mindkét funkciót ugyanazt a kimenetet használja:

var name = "Mark";
var date = DateTime.Now;

// Composite formatting:
Console.WriteLine("Hello, {0}! Today is {1}, it's {2:HH:mm} now.", name, date.DayOfWeek, date);
// String interpolation:
Console.WriteLine($"Hello, {name}! Today is {date.DayOfWeek}, it's {date:HH:mm} now.");
// Both calls produce the same output that is similar to:
// Hello, Mark! Today is Wednesday, it's 19:40 now.

A C# 10-től kezdődően egy interpolált sztring használatával inicializálhat egy állandó sztringet. Ezt csak akkor teheti meg, ha az interpolált sztringben lévő összes interpolációs kifejezés állandó sztring is.

Interpolált sztring felépítése

Ha egy sztringkonstanst interpolált sztringként szeretne azonosítani, a szimbólummal $ előre fel kell függesztetnie. Nem lehet szóköz a sztringkonstanst indító és " a $ között.

Egy interpolációs kifejezéssel rendelkező elem felépítése a következő:

{<interpolationExpression>[,<alignment>][:<formatString>]}

A szögletes zárójelek elemei nem kötelezőek. Az alábbi táblázat az egyes elemeket ismerteti:

Elem Leírás
interpolationExpression A formázandó eredményt eredményező kifejezés. A sztring ábrázolása null az .String.Empty
alignment Az a konstans kifejezés, amelynek értéke meghatározza a kifejezés eredményének sztringképében szereplő karakterek minimális számát. Ha pozitív, a sztring-ábrázolás jobbra van igazítva; ha negatív, akkor balra igazított. További információ: Az összetett formázási cikk Igazítás összetevő szakasza.
formatString A kifejezés eredményének típusa által támogatott formátumsztring. További információt az Összetett formázás című cikk Sztringösszetevők formázása című szakaszában talál.

Az alábbi példa a fent ismertetett választható formázási összetevőket használja:

Console.WriteLine($"|{"Left",-7}|{"Right",7}|");

const int FieldWidthRightAligned = 20;
Console.WriteLine($"{Math.PI,FieldWidthRightAligned} - default formatting of the pi number");
Console.WriteLine($"{Math.PI,FieldWidthRightAligned:F3} - display only three decimal digits of the pi number");
// Output is:
// |Left   |  Right|
//     3.14159265358979 - default formatting of the pi number
//                3.142 - display only three decimal digits of the pi number

A C# 11-től kezdődően az interpolációs kifejezés új soraival olvashatóbbá teheti a kifejezés kódját. Az alábbi példa bemutatja, hogy az új sorok hogyan javíthatják a mintaegyezést tartalmazó kifejezések olvashatóságát:

string message = $"The usage policy for {safetyScore} is {
    safetyScore switch
    {
        > 90 => "Unlimited usage",
        > 80 => "General usage, with daily safety check",
        > 70 => "Issues must be addressed within 1 week",
        > 50 => "Issues must be addressed within 1 day",
        _ => "Issues must be addressed before continued use",
    }
    }";

Interpolált nyers sztringkonstansok

A C# 11-től kezdődően használhat interpolált nyers sztringkonstanst, ahogy az alábbi példa is mutatja:

int X = 2;
int Y = 3;

var pointMessage = $"""The point "{X}, {Y}" is {Math.Sqrt(X * X + Y * Y):F3} from the origin""";

Console.WriteLine(pointMessage);
// Output is:
// The point "2, 3" is 3.606 from the origin

Ha az eredménysztringbe szeretne beágyazni és } karaktereket beszúrni{, indítson el egy interpolált nyers sztringkonstanst több $ karakterrel. Ha ezt teszi, az eredménysztringbe a karakterek számánál {$ rövidebb vagy } rövidebb sorozatok lesznek beágyazva. Ha az interpolációs kifejezést a sztringbe szeretné befoglalni, a karakterek számával $ megegyező számú kapcsos zárójelet kell használnia, ahogyan az alábbi példa mutatja:

int X = 2;
int Y = 3;

var pointMessage = $$"""{The point {{{X}}, {{Y}}} is {{Math.Sqrt(X * X + Y * Y):F3}} from the origin}""";
Console.WriteLine(pointMessage);
// Output is:
// {The point {2, 3} is 3.606 from the origin}

Az előző példában egy interpolált nyers sztringkonstans két $ karakterrel kezdődik. Ezért kell minden interpolációs kifejezést a dupla zárójelek közé }}tenni. {{ A függvény egyetlen kapcsos zárójelet ágyaz be egy eredménysztringbe. Ha ismétlődő { vagy } karaktereket szeretne beágyazni egy eredménysztringbe, használjon megfelelő számú $ karaktert egy interpolált nyers sztringkonstans kijelöléséhez.

Speciális karakterek

Ha "{" vagy "}" kapcsos zárójelet szeretne felvenni egy interpolált sztring által létrehozott szövegbe, használjon két kapcsos zárójelet: "{{" vagy "}}". További információ: Az összetett formázási cikk Szökőkapcsos zárójelek szakasza.

Mivel a kettőspont (":") speciális jelentéssel rendelkezik egy interpolációs kifejezéselemben, a feltételes operátorok interpolációs kifejezésben való használatához zárójelekbe kell tenni ezt a kifejezést.

Az alábbi példa bemutatja, hogyan lehet kapcsos zárójelet belefoglalni egy eredménysztringbe. A feltételes operátorok használatát is bemutatja:

string name = "Horace";
int age = 34;
Console.WriteLine($"He asked, \"Is your name {name}?\", but didn't wait for a reply :-{{");
Console.WriteLine($"{name} is {age} year{(age == 1 ? "" : "s")} old.");
// Output is:
// He asked, "Is your name Horace?", but didn't wait for a reply :-{
// Horace is 34 years old.

Az interpolált szó szerinti sztring mindkettővel $ és @ karakterekkel kezdődik. Használhatja $ és @ tetszőleges sorrendben: mindkettő $@"..." , és @$"..." érvényes interpolált szó szerinti sztringek. A szó szerinti sztringekről a sztringekről és a szó szerinti azonosítókról szóló cikkekben talál további információt.

Kultúraspecifikus formázás

Alapértelmezés szerint az interpolált sztring a tulajdonság által definiált jelenlegi kultúrát használja az CultureInfo.CurrentCulture összes formázási művelethez.

Ha egy interpolált sztringet egy kultúraspecifikus eredménysztringre szeretne feloldani, használja a String.Create(IFormatProvider, DefaultInterpolatedStringHandler) .NET 6-tól kezdődően elérhető metódust. Az alábbi példa bemutatja, hogyan teheti ezt meg:

double speedOfLight = 299792.458;

System.Globalization.CultureInfo.CurrentCulture = System.Globalization.CultureInfo.GetCultureInfo("nl-NL");
string messageInCurrentCulture = $"The speed of light is {speedOfLight:N3} km/s.";

var specificCulture = System.Globalization.CultureInfo.GetCultureInfo("en-IN");
string messageInSpecificCulture = string.Create(
    specificCulture, $"The speed of light is {speedOfLight:N3} km/s.");

string messageInInvariantCulture = string.Create(
    System.Globalization.CultureInfo.InvariantCulture, $"The speed of light is {speedOfLight:N3} km/s.");

Console.WriteLine($"{System.Globalization.CultureInfo.CurrentCulture,-10} {messageInCurrentCulture}");
Console.WriteLine($"{specificCulture,-10} {messageInSpecificCulture}");
Console.WriteLine($"{"Invariant",-10} {messageInInvariantCulture}");
// Output is:
// nl-NL      The speed of light is 299.792,458 km/s.
// en-IN      The speed of light is 2,99,792.458 km/s.
// Invariant  The speed of light is 299,792.458 km/s.

A .NET 5 és korábbi verzióiban használja az interpolált sztring implicit konvertálását egy FormattableString példányra. Ezután használhat példánymetódust FormattableString.ToString(IFormatProvider) vagy statikus FormattableString.Invariant metódust egy kultúraspecifikus eredménysztring létrehozásához. Az alábbi példa bemutatja, hogyan teheti ezt meg:

double speedOfLight = 299792.458;
FormattableString message = $"The speed of light is {speedOfLight:N3} km/s.";

var specificCulture = System.Globalization.CultureInfo.GetCultureInfo("en-IN");
string messageInSpecificCulture = message.ToString(specificCulture);
Console.WriteLine(messageInSpecificCulture);
// Output:
// The speed of light is 2,99,792.458 km/s.

string messageInInvariantCulture = FormattableString.Invariant(message);
Console.WriteLine(messageInInvariantCulture);
// Output is:
// The speed of light is 299,792.458 km/s.

Az egyéni formázással kapcsolatos további információkért tekintse meg a .NET-cikkek formázási típusainak ICustomFormatterrel foglalkozó szakaszát.

Egyéb erőforrások

Ha még nem ismerkedik a sztring-interpolációval, tekintse meg a sztring interpolációját a C# interaktív oktatóanyagában. A C# oktatóanyagban egy másik sztring-interpolációt is ellenőrizheti. Ez az oktatóanyag bemutatja, hogyan használhatók interpolált sztringek formázott sztringek előállítására.

Interpolált sztringek fordítása

A C# 10-től és a .NET 6-tól kezdve a fordító ellenőrzi, hogy az interpolált sztring olyan típushoz van-e hozzárendelve, amely megfelel az interpolált sztringkezelő mintájának. Az interpolált sztringkezelő olyan típus, amely az interpolált sztringet eredménysztringgé alakítja. Ha egy interpolált sztring típusa stringvan, a függvény feldolgozza azt System.Runtime.CompilerServices.DefaultInterpolatedStringHandler. Az egyéni interpolált sztringkezelő példáját lásd az Egyéni sztring interpolációkezelőjének írása oktatóanyagban. Az interpolált sztringkezelő használata egy speciális forgatókönyv, amely általában teljesítménybeli okokból szükséges.

Feljegyzés

Az interpolált sztringkezelők egyik mellékhatása, hogy az egyéni kezelők, beleértve System.Runtime.CompilerServices.DefaultInterpolatedStringHandleraz interpolált sztringben lévő összes interpolációs kifejezést, minden feltétel mellett nem értékelhetik ki. Ez azt jelenti, hogy ezeknek a kifejezéseknek a mellékhatásai nem fordulhatnak elő.

A C# 10 előtt, ha egy interpolált sztring típusa stringvan, az általában metódushívássá String.Format alakul át. A fordító lecserélhető String.FormatString.Concat , ha az elemzett viselkedés egyenértékű lenne az összefűzéssel.

Ha egy interpolált sztring típusa vagy FormattableStringtípusa IFormattable van, a fordító meghívja a FormattableStringFactory.Create metódust.

C# nyelvspecifikáció

További információ: Interpolált sztringkifejezések szakasz a C# nyelvi specifikációban és az alábbi új funkcióspecifikációkban:

Lásd még