Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Tip
Artikel ini adalah bagian dari bagian Dasar-Dasar untuk pengembang yang sudah mengetahui setidaknya satu bahasa pemrograman dan mempelajari C#. Jika Anda baru menggunakan pemrograman, mulailah dengan tutorial Memulai terlebih dahulu.
Berasal dari bahasa lain? Interpolasi string dalam C# berfungsi seperti literal templat di JavaScript (`${x}`) atau f-string dalam Python (f"{x}"). Ekspresi di dalamnya {} dapat berupa ekspresi C# yang valid, dan Anda dapat menambahkan penentu format dan perataan tanpa meninggalkan string.
Interpolasi string memungkinkan Anda menyematkan ekspresi secara langsung ke dalam literal string dengan menambahkan awalan $ pada literal tersebut:
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
Masing-masing { } adalah ekspresi interpolasi. C# mengevaluasi ekspresi, mengonversi hasilnya menjadi string dengan memanggil metodenya ToString() , dan mengganti teks menjadi hasilnya. Interpolasi string untuk ekspresi null berupa string kosong. Dalam kebanyakan kasus, konversi default menghasilkan output yang Anda inginkan, dan Anda tidak perlu melakukan apa pun lagi.
String terinterpolasi adalah alternatif yang lebih mudah dibaca untuk String.Format, dan mendukung kumpulan fitur pemformatan komposit lengkap. Apa pun yang dapat Anda lakukan dengan string format posisi klasik—penentu format, perataan, pemformatan sadar budaya, dan string konstanta—Anda juga dapat melakukannya dengan string terinterpolasi. Sisa artikel ini mencakup opsi tersebut. Jangkau mereka hanya ketika Anda membutuhkan kontrol yang lebih baik atas hasilnya; jika tidak, bentuk polos $"{expression}" sudah cukup.
Untuk pembahasan sintaks dan tipe handler yang mendasarinya dalam referensi bahasa, lihat referensi string terinterpolasi. Untuk topik yang berfokus pada performa seperti Span<char> interpolasi dan penanganan string terinterpolasi kustom, lihat Operasi string.
Menerapkan string format
Untuk mengontrol bagaimana hasil ekspresi diformat, ikuti ekspresi dengan titik dua dan string format standar atau kustom:
{<expression>:<formatString>}
Contoh berikut memformat nilai DateTime dan Double :
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.
Mengatur lebar dan perataan bidang
Untuk menghasilkan output yang diratakan, ikuti ekspresi dengan koma dan lebar bidang minimum. Lebar positif membuat nilainya rata kanan, dan lebar negatif membuatnya rata kiri:
{<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|
Saat Anda memerlukan perataan dan string format, letakkan perataan terlebih dahulu:
{<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|
Jika nilai yang diformat lebih panjang dari lebar yang diminta, C# mengabaikan lebar dan memancarkan nilai penuh.
Kurung kurawal escape dan gunakan urutan escape
String terinterpolasi mendukung urutan escape yang sama dengan literal string biasa. Untuk menyertakan karakter literal { atau } dalam hasil, gandakan karakter tersebut ({{ atau }}).
Untuk path dan string lain yang berisi garis miring terbalik, sebaiknya gunakan literal string mentah terinterpolasi ($"""...""") alih-alih bentuk verbatim lama ($@"..."). Literal string mentah tidak memproses sekuens escape, sehingga garis miring terbalik muncul apa adanya:
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
Gunakan ekspresi kondisional
Tanda titik dua memiliki arti khusus di dalam ekspresi interpolasi, jadi bungkus ekspresi kondisional dalam tanda kurung:
var rand = new Random(42);
for (int i = 0; i < 3; i++)
{
Console.WriteLine($"Coin flip: {(rand.NextDouble() < 0.5 ? "heads" : "tails")}");
}
Bentangkan ekspresi ke beberapa baris
Untuk keterbacaan yang lebih baik, putuskan ekspresi interpolasi panjang di beberapa baris. Ekspresi interpolasi multibaris tersedia sejak C# 11. Contoh berikut menambahkan baris baru antara { karakter dan } untuk memisahkan ekspresi terinterpolasi dari teks harfiah:
int[] numbers = [3, 1, 4, 1, 5, 9, 2, 6];
Console.WriteLine($"Total: {
numbers.Sum()
}, average: {numbers.Average():F2}.");
// => Total: 31, average: 3.88.
Buat string konstan
Anda dapat membangun string terinterpolasi konstan saat setiap ekspresi terinterpolasi adalah nilai konstanta. Itu membuatnya dapat digunakan untuk argumen atribut, switch pola, dan konteks lain yang memerlukan konstanta waktu kompilasi:
const string Audience = "world";
const string Greeting = $"Hello, {Audience}!";
Console.WriteLine(Greeting);
// => Hello, world!
Format dengan budaya tertentu
Secara default, string terinterpolasi memformat nilai menggunakan CultureInfo.CurrentCulture, yang memengaruhi representasi tanggal, angka, dan mata uang. Untuk output deterministik, berikan budaya eksplisit ke String.Create(IFormatProvider, DefaultInterpolatedStringHandler):
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
Untuk output invarian (log, format file, data yang dapat dibaca mesin), teruskan CultureInfo.InvariantCulture:
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