$ - dize enterpolasyonu (C# referansı)$ - string interpolation (C# reference)

Özel $ karakter, bir dize literal bir interpolated dizeolarak tanımlar.The $ special character identifies a string literal as an interpolated string. Enterpolasyonlu dize, enterpolasyon ifadeleriiçerebilecek bir dize dir.An interpolated string is a string literal that might contain interpolation expressions. Enterpolasyonlu bir dize bir sonuç dizesine çözüldüğünde, enterpolasyon ifadeleri içeren öğeler ifade sonuçlarının dize gösterimleri ile değiştirilir.When an interpolated string is resolved to a result string, items with interpolation expressions are replaced by the string representations of the expression results. Bu özellik C# 6 ile başlayarak kullanılabilir.This feature is available starting with C# 6.

Dize enterpolasyonu, dize bileşik biçimlendirme özelliğinden daha biçimlendirilmiş dizeleri oluşturmak için daha okunabilir ve kullanışlı bir sözdizimi sağlar.String interpolation provides a more readable and convenient syntax to create formatted strings than a string composite formatting feature. Aşağıdaki örnek, aynı çıktıyı üretmek için her iki özelliği de kullanır:The following example uses both features to produce the same output:

string 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.

İnterpolated dize yapısıStructure of an interpolated string

Bir dize literal bir interpolated dize olarak $ tanımlamak için, sembolü ile prepend.To identify a string literal as an interpolated string, prepend it with the $ symbol. Bir dize harfi ile $ başlayan " arasında herhangi bir beyaz boşluk olamaz.You cannot have any white space between the $ and the " that starts a string literal.

Enterpolasyon ifadesi olan bir öğenin yapısı aşağıdaki gibidir:The structure of an item with an interpolation expression is as follows:

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

Köşeli parantezler içindeki öğeler isteğe bağlıdır.Elements in square brackets are optional. Aşağıdaki tabloda her öğe açıklanır:The following table describes each element:

ÖğeElement AçıklamaDescription
interpolationExpression Biçimlendirilecek bir sonuç üreten ifade.The expression that produces a result to be formatted. String null gösterimi String.Empty.String representation of null is String.Empty.
alignment İfade sonucunun dize gösterimindeki en az karakter sayısını tanımlayan değer olan sabit ifade.The constant expression whose value defines the minimum number of characters in the string representation of the expression result. Pozitifse, dize gösterimi doğru hizalanmış; negatif ise, sol hizalı.If positive, the string representation is right-aligned; if negative, it's left-aligned. Daha fazla bilgi için Hizalama Bileşeni'nebakın.For more information, see Alignment Component.
formatString İfade sonucunun türü tarafından desteklenen bir biçim dizesi.A format string that is supported by the type of the expression result. Daha fazla bilgi için Bkz. Biçim Dize Bileşeni.For more information, see Format String Component.

Aşağıdaki örnekte, yukarıda açıklanan isteğe bağlı biçimlendirme bileşenleri kullanır:The following example uses optional formatting components described above:

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");
// Expected output is:
// |Left   |  Right|
//     3.14159265358979 - default formatting of the pi number
//                3.142 - display only three decimal digits of the pi number    

Özel karakterlerSpecial characters

Enterpolasyonlu bir dize tarafından üretilen metne "{" veya "}" bir ayraç eklemek için "{{" veya "}}" olmak üzere iki ayraç kullanın.To include a brace, "{" or "}", in the text produced by an interpolated string, use two braces, "{{" or "}}". Daha fazla bilgi için bkz.For more information, see Escaping Braces.

Üst üste (":") bir enterpolasyon ifade öğesinde özel bir anlamı olduğundan, bir enterpolasyon ifadesinde koşullu işleç kullanmak için, bu ifadeyi parantez içine alar.As the colon (":") has special meaning in an interpolation expression item, in order to use a conditional operator in an interpolation expression, enclose that expression in parentheses.

Aşağıdaki örnek, bir sonuç dizesine nasıl bir ayraç eklenmeyi ve bir enterpolasyon ifadesinde koşullu işlecinin nasıl kullanılacağını gösterir:The following example shows how to include a brace in a result string and how to use a conditional operator in an interpolation expression:

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.");
// Expected output is:
// He asked, "Is your name Horace?", but didn't wait for a reply :-{
// Horace is 34 years old.

İnterpolated verbatim dize $ @ karakter tarafından takip karakter ile başlar.An interpolated verbatim string starts with the $ character followed by the @ character. Kelime nin dizeleri hakkında daha fazla bilgi için dize ve tam olarak tanımlayıcı konulara bakın.For more information about verbatim strings, see the string and verbatim identifier topics.

Not

C# 8.0 ile başlayarak, $ @ belirteçleri ve belirteçleri herhangi bir sırada kullanabilirsiniz: her ikisi de $@"..." ve @$"..." geçerli enterpolasyonlu kelime dizeleri vardır.Starting with C# 8.0, you can use the $ and @ tokens in any order: both $@"..." and @$"..." are valid interpolated verbatim strings. Önceki C# sürümlerinde $ belirteç belirteçten @ önce görünmelidir.In earlier C# versions, the $ token must appear before the @ token.

Örtülü dönüşümler ve IFormatProvider uygulamanın nasıl belirtilirImplicit conversions and how to specify IFormatProvider implementation

Enterpolasyonlu bir dizeden üç örtük dönüşüm vardır:There are three implicit conversions from an interpolated string:

  1. Enterpolasyonlu bir dize, enterpolasyon ifade öğelerinin sonuçlarının düzgün biçimlendirilmiş dize gösterimleriyle değiştirildiği enterpolasyon lu dize çözünürlüğünün sonucu olan bir String örne dönüştürülmesi.Conversion of an interpolated string to a String instance that is the result of interpolated string resolution with interpolation expression items being replaced with the properly formatted string representations of their results. Bu dönüştürme CurrentCulture ifade sonuçlarını biçimlendirmek için kullanır.This conversion uses the CurrentCulture to format expression results.

  2. Enterpolasyonlu bir dizenin biçimlendirilecek ifade sonuçlarıyla birlikte bileşik biçim dizesini temsil eden bir FormattableString örne dönüştürülmesi.Conversion of an interpolated string to a FormattableString instance that represents a composite format string along with the expression results to be formatted. Bu, tek FormattableString bir örnekten kültüre özgü içeriğe sahip birden çok sonuç dizesi oluşturmanıza olanak tanır.That allows you to create multiple result strings with culture-specific content from a single FormattableString instance. Bunu yapmak için aşağıdaki yöntemlerden birini arayın:To do that, call one of the following methods:

    Yöntemi, ToString(IFormatProvider) özel biçimlendirmeyi destekleyen IFormatProvider arabirimin kullanıcı tanımlı bir uygulamasını sağlamak için de kullanabilirsiniz.You also can use the ToString(IFormatProvider) method to provide a user-defined implementation of the IFormatProvider interface that supports custom formatting. Daha fazla bilgi için,.NET makalesindeki Biçimlendirme türlerinin ICustomFormatter bölümüyle Özel biçimlendirmebölümüne bakın.For more information, see the Custom formatting with ICustomFormatter section of the Formatting types in .NET article.

  3. Enterpolasyonlu bir dizenin, tek IFormattable IFormattable bir örnekten kültüre özgü içeriğe sahip birden çok sonuç dizesi oluşturmanıza olanak tanıyan bir örne dönüştürülmesi.Conversion of an interpolated string to an IFormattable instance that also allows you to create multiple result strings with culture-specific content from a single IFormattable instance.

Aşağıdaki örnek, kültüre FormattableString özgü sonuç dizeleri oluşturmak için örtük dönüştürme kullanır:The following example uses implicit conversion to FormattableString to create culture-specific result strings:

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

System.Globalization.CultureInfo.CurrentCulture = System.Globalization.CultureInfo.GetCultureInfo("nl-NL");
string messageInCurrentCulture = message.ToString();

var specificCulture = System.Globalization.CultureInfo.GetCultureInfo("en-IN");
string messageInSpecificCulture = message.ToString(specificCulture);

string messageInInvariantCulture = FormattableString.Invariant(message);

Console.WriteLine($"{System.Globalization.CultureInfo.CurrentCulture,-10} {messageInCurrentCulture}");
Console.WriteLine($"{specificCulture,-10} {messageInSpecificCulture}");
Console.WriteLine($"{"Invariant",-10} {messageInInvariantCulture}");
// Expected 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.

Ek kaynaklarAdditional resources

Dize enterpolasyonunda yeniyseniz, C# etkileşimli öğreticideki String enterpolasyonuna bakın.If you are new to string interpolation, see the String interpolation in C# interactive tutorial. Ayrıca, biçimlendirilmiş dizeleri oluşturmak için enterpolasyonlu dizeleri nasıl kullanılacağını gösteren C# öğreticibaşka bir String enterpolasyon kontrol edebilirsiniz.You also can check another String interpolation in C# tutorial that demonstrates how to use interpolated strings to produce formatted strings.

Enterpolasyonlu dizelerin derlemiCompilation of interpolated strings

Enterpolasyonlu bir dize stringtürüne sahipse, String.Format genellikle bir yöntem çağrısına dönüştürülür.If an interpolated string has the type string, it's typically transformed into a String.Format method call. Derleyici, çözümlenen String.Concat davranışın birliktemeye eşdeğer olup olmadığını değiştirebilir. String.FormatThe compiler may replace String.Format with String.Concat if the analyzed behavior would be equivalent to concatenation.

Enterpolasyonlu bir dize IFormattable FormattableStringtürü varsa veya derleyici FormattableStringFactory.Create yönteme bir çağrı oluşturur.If an interpolated string has the type IFormattable or FormattableString, the compiler generates a call to the FormattableStringFactory.Create method.

C# dili belirtimiC# language specification

Daha fazla bilgi için C# dil belirtiminin Enterpolasyonlu dizeleri bölümüne bakın.For more information, see the Interpolated strings section of the C# language specification.

Ayrıca bkz.See also