C'de dize ilişkilendirmesi#

İpucu

Bu makale, en az bir programlama dili bilen ve C# dilini öğrenen geliştiriciler için Temel Bilgiler bölümünün bir parçasıdır. Programlamaya yeni başladıysanız ilk olarak Başlangıç öğreticileri ile başlayın.

Başka bir dilden mi geliyorsunuz? C# dilinde dize ilişkilendirmesi, JavaScript'teki şablon değişmez değerleri (`${x}`) veya Python f dizeleri (f"{x}") gibi çalışır. içindeki {} ifade herhangi bir geçerli C# ifadesi olabilir ve dizeden çıkmadan biçim ve hizalama tanımlayıcıları ekleyebilirsiniz.

Dize enterpolasyonu, dize değişmezinin başına $ getirerek ifadeleri doğrudan dize içine yerleştirmenizi sağlar:

double a = 3;
double b = 4;
Console.WriteLine($"Area of the right triangle with legs of {a} and {b} is {0.5 * a * b}");
Console.WriteLine($"Length of the hypotenuse of the right triangle with legs of {a} and {b} is {CalculateHypotenuse(a, b)}");
double CalculateHypotenuse(double leg1, double leg2) => Math.Sqrt(leg1 * leg1 + leg2 * leg2);
// => Area of the right triangle with legs of 3 and 4 is 6
// => Length of the hypotenuse of the right triangle with legs of 3 and 4 is 5

Her { } biri bir ilişkilendirme ifadesidir. C# ifadeyi değerlendirir, yöntemini çağırarak ToString() sonucu bir dizeye dönüştürür ve sonucun yerine metni koyar. bir null ifadenin dize ilişkilendirmesi boş dizedir. Çoğu durumda, varsayılan dönüştürme istediğiniz çıkışı üretir ve daha fazla işlem yapmanız gerekmez.

Enterpolasyonlu dizeler, String.Format için daha okunabilir bir alternatiftir ve bileşik biçimlendirme özelliğinin tüm özellik kümesini destekler. Biçim tanımlayıcıları, hizalama, kültüre duyarlı biçimlendirme ve sabit dizeler gibi klasik bir konumsal biçim dizesiyle yapabileceğiniz her şeyi, ilişkilendirilmiş bir dizeyle de yapabilirsiniz. Bu makalenin geri kalanında bu seçenekler yer alır. Yalnızca sonuç üzerinde daha hassas bir denetime ihtiyacınız olduğunda bunlara ulaşın; aksi takdirde, düz $"{expression}" form yeterlidir.

Söz dizimi ve temel alınan işleyici türlerine ilişkin dil başvurusundaki açıklama için bkz. enterpolasyonlu dize başvurusu. İlişkilendirme ve özel ilişkilendirilmiş dize işleyicileri gibi Span<char> performans odaklı konular için bkz . Dize işlemleri.

Biçim dizesi uygula

Bir ifade sonucunun nasıl biçimlendirileceğini kontrol etmek için, ifadenin ardından iki nokta üst üste ve standart veya özel bir biçim dizesi ekleyin:

{<expression>:<formatString>}

Aşağıdaki örnek a DateTime ve Double değerini biçimlendirdi:

var date = new DateTime(1731, 11, 25);
Console.WriteLine($"On {date:dddd, MMMM dd, yyyy} L. Euler introduced the letter e to denote {Math.E:F5}.");
// => On Sunday, November 25, 1731 L. Euler introduced the letter e to denote 2.71828.

Alan genişliğini ve hizalamasını ayarlama

Hizalı çıktı üretmek için, ifadenin ardından bir virgül ve minimum alan genişliği belirtin. Pozitif genişlikler değeri sağa hizalar ve negatif genişlikler sola hizalar:

{<expression>,<width>}
var titles = new Dictionary<string, string>()
{
    ["Doyle, Arthur Conan"] = "Hound of the Baskervilles, The",
    ["London, Jack"] = "Call of the Wild, The",
    ["Shakespeare, William"] = "Tempest, The"
};

Console.WriteLine("Author and Title List");
Console.WriteLine();
Console.WriteLine($"|{"Author",-25}|{"Title",30}|");
foreach (var title in titles)
{
    Console.WriteLine($"|{title.Key,-25}|{title.Value,30}|");
}
// => Author and Title List
// =>
// => |Author                   |                         Title|
// => |Doyle, Arthur Conan      |Hound of the Baskervilles, The|
// => |London, Jack             |         Call of the Wild, The|
// => |Shakespeare, William     |                  Tempest, The|

Hem hizalamaya hem de biçim dizesine ihtiyacınız olduğunda, önce hizalamayı koyun:

{<expression>,<width>:<formatString>}
const int NameAlignment = -9;
const int ValueAlignment = 7;
double a = 3;
double b = 4;
Console.WriteLine($"Three classical Pythagorean means of {a} and {b}:");
Console.WriteLine($"|{"Arithmetic",NameAlignment}|{0.5 * (a + b),ValueAlignment:F3}|");
Console.WriteLine($"|{"Geometric",NameAlignment}|{Math.Sqrt(a * b),ValueAlignment:F3}|");
Console.WriteLine($"|{"Harmonic",NameAlignment}|{2 / (1 / a + 1 / b),ValueAlignment:F3}|");
// => Three classical Pythagorean means of 3 and 4:
// => |Arithmetic|  3.500|
// => |Geometric|  3.464|
// => |Harmonic |  3.429|

Biçimlendirilmiş değer istenen genişlikten uzunsa, C# genişliği yoksayar ve tam değeri yayar.

Kaçış ayraçları ve kaçış dizilerini kullanma

Enterpolasyonlu dizeler, normal dize sabitleriyle aynı kaçış dizilerini destekler. Sonuçta birebir { veya } karakterini eklemek için, bunu iki kez yazın ({{ veya }}).

Dosya yolları ve ters eğik çizgi içeren diğer dizeler için, eski verbatim biçimi ($@"...") yerine enterpolasyonlu ham dize sabiti'ni ($"""...""") tercih edin. Ham dize sabitleri kaçış dizilerini yorumlamaz, bu nedenle ters eğik çizgiler olduğu gibi görünür:

int[] xs = [1, 2, 7, 9];
int[] ys = [7, 9, 12];
Console.WriteLine($"Find the intersection of the {{{string.Join(", ", xs)}}} and {{{string.Join(", ", ys)}}} sets.");
// => Find the intersection of the {1, 2, 7, 9} and {7, 9, 12} sets.

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

Koşullu ifade kullanma

İki nokta üst üste, bir enterpolasyon ifadesinin içinde özel bir anlama sahiptir; bu nedenle koşullu ifadeyi parantez içine alın:

var rand = new Random(42);
for (int i = 0; i < 3; i++)
{
    Console.WriteLine($"Coin flip: {(rand.NextDouble() < 0.5 ? "heads" : "tails")}");
}

İfadeyi birden çok satıra yayma

Daha iyi okunabilirlik için, uzun ilişkilendirme ifadelerini birden çok satır arasında bölün. C# 11'den bu yana çok satırlı ilişkilendirme ifadeleri kullanılabilir. Aşağıdaki örnek, enterpolasyonlu ifadeleri sabit metinden ayırmak için { ile } karakterlerinin arasına yeni satırlar ekler:

int[] numbers = [3, 1, 4, 1, 5, 9, 2, 6];
Console.WriteLine($"Total: {
        numbers.Sum()
        }, average: {numbers.Average():F2}.");
// => Total: 31, average: 3.88.

Sabit dizeler oluşturma

Her ilişkilendirilmiş ifade sabit bir değer olduğunda sabit ilişkilendirilmiş dizeler oluşturabilirsiniz. Bu, derleme zamanı sabitleri gerektiren öznitelik bağımsız değişkenleri, switch desenleri ve diğer bağlamlar için kullanılabilir olmasını sağlar:

const string Audience = "world";
const string Greeting = $"Hello, {Audience}!";
Console.WriteLine(Greeting);
// => Hello, world!

Belirli bir kültürle biçimlendirme

Varsayılan olarak, enterpolasyonlu bir dize değerleri CultureInfo.CurrentCulture kullanarak biçimlendirir; bu da tarih, sayı ve para birimi temsillerini etkiler. Deterministik çıktı için, String.Create(IFormatProvider, DefaultInterpolatedStringHandler) öğesine açıkça bir kültür iletin:

CultureInfo[] cultures =
[
    CultureInfo.GetCultureInfo("en-US"),
    CultureInfo.GetCultureInfo("en-GB"),
    CultureInfo.GetCultureInfo("nl-NL"),
    CultureInfo.InvariantCulture
];
var date = new DateTime(2026, 5, 21, 12, 35, 31);
var number = 31_415_926.536;
foreach (var culture in cultures)
{
    var cultureSpecificMessage = string.Create(culture, $"{date,23}{number,20:N3}");
    Console.WriteLine($"{culture.Name,-10}{cultureSpecificMessage}");
}
// Output is similar to:
// => en-US       5/21/2026 12:35:31 PM      31,415,926.536
// => en-GB         21/05/2026 12:35:31      31,415,926.536
// => nl-NL         21-05-2026 12:35:31      31.415.926,536
// =>               05/21/2026 12:35:31      31,415,926.536

Değişmez çıktı (günlükler, dosya biçimleri, makine tarafından okunabilir veriler) için CultureInfo.InvariantCulture iletin:

var timestamp = new DateTime(2026, 5, 21, 15, 46, 24);
string message = string.Create(CultureInfo.InvariantCulture, $"Date and time in invariant culture: {timestamp}");
Console.WriteLine(message);
// => Date and time in invariant culture: 05/21/2026 15:46:24

Ayrıca bakınız