Interpolasi string menggunakan $

Karakter $ mengidentifikasi string literal sebagai string terinterpolasi. String yang diinterpolasi adalah string literal yang mungkin berisi ekspresi interpolasi. Ketika string yang diinterpolasi diselesaikan menjadi string hasil, item dengan ekspresi interpolasi diganti dengan representasi string dari hasil ekspresi.

Interpolasi string menyediakan sintaks yang lebih mudah dibaca dan nyaman untuk memformat string. Lebih mudah dibaca daripada format komposit string . Contoh berikut menggunakan kedua fitur untuk menghasilkan output yang sama:

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.

Dimulai dengan C# 10, Anda dapat menggunakan string terinterpolasi untuk menginisialisasi string konstanta . Anda dapat melakukannya hanya jika semua ekspresi interpolasi dalam string terinterpolasi juga merupakan string konstanta.

Struktur string yang diinterpolasi

Untuk mengidentifikasi string literal sebagai string yang diinterpolasi, tambahkan simbol $. Tidak boleh ada spasi kosong di antara $ dan " yang memulai string literal.

Struktur item dengan ekspresi interpolasi adalah sebagai berikut:

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

Elemen dalam tanda kurung siku bersifat opsional. Tabel berikut menjelaskan masing-masing elemen:

Elemen Deskripsi
interpolationExpression Ekspresi yang membuat hasil yang akan diformat. Representasi string dari null adalah String.Empty.
alignment Ekspresi konstanta yang nilainya mendefinisikan jumlah minimum karakter dalam representasi string dari hasil ekspresi. Jika positif, representasi string rata kanan; jika negatif, rata kiri. Untuk informasi selengkapnya, lihat bagian Komponen perataan dari artikel Pemformatan komposit.
formatString String format yang didukung oleh jenis hasil ekspresi. Untuk informasi selengkapnya, lihat bagian Komponen string format dari artikel Pemformatan komposit.

Contoh berikut menggunakan komponen pemformatan opsional yang dijelaskan di atas:

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

Dimulai dengan C# 11, Anda dapat menggunakan baris baru dalam ekspresi interpolasi untuk membuat kode ekspresi lebih mudah dibaca. Contoh berikut menunjukkan bagaimana baris baru dapat meningkatkan keterbacaan ekspresi yang melibatkan pencocokan pola:

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",
    }
    }";

Literal string mentah terinterpolasi

Dimulai dengan C# 11, Anda dapat menggunakan string mentah terinterpolasi literal, seperti yang ditunjukkan contoh berikut:

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

Untuk menyematkan { karakter dan } dalam string hasil, mulai string mentah terinterpolasi literal dengan beberapa $ karakter. Saat Anda melakukannya, urutan { atau } karakter apa pun yang lebih pendek dari jumlah $ karakter disematkan dalam string hasil. Untuk mengapit ekspresi interpolasi apa pun dalam string tersebut, Anda perlu menggunakan jumlah kurung kurawal yang sama dengan jumlah $ karakter, seperti yang ditunjukkan contoh berikut:

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}

Dalam contoh sebelumnya, string mentah terinterpolasi literal dimulai dengan dua $ karakter. Itu sebabnya Anda perlu menempatkan setiap ekspresi interpolasi antara kurung kurawal ganda, {{ dan }}. Satu kurung kurawal disematkan ke dalam string hasil. Jika Anda perlu menyematkan { karakter atau } berulang ke dalam string hasil, gunakan jumlah $ karakter yang tepat untuk menunjuk string mentah terinterpolasi literal.

Karakter khusus

Untuk menyertakan tanda kurung kurawal, "{" atau "}", dalam teks yang dihasilkan oleh string yang diinterpolasi, gunakan dua tanda kurung kurawal, "{{" atau "}}". Untuk informasi selengkapnya, lihat bagian Kurung kurawal pelepasan dari artikel Pemformatan komposit.

Karena titik dua (":") memiliki arti khusus dalam item ekspresi interpolasi, untuk menggunakan operator bersyarat dalam ekspresi interpolasi, sertakan ekspresi tersebut dalam tanda kurung.

Contoh berikut menunjukkan cara memasukkan tanda kurung kurawal dalam string hasil. Contoh berikut juga menunjukkan cara menggunakan operator bersyarat:

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.

String verbatim terinterpolasi dimulai dengan karakter dan @ keduanya$. Anda dapat menggunakan $ dan @ dalam urutan apa pun: keduanya $@"..." dan @$"..." merupakan string verbatim terinterpolasi yang valid. Untuk informasi selengkapnya tentang string kata demi kata, lihat artikel string dan pengidentifikasi kata demi kata.

Pemformatan khusus budaya

Secara default, string terinterpolasi menggunakan budaya yang saat ini yang ditentukan oleh CultureInfo.CurrentCulture properti untuk semua operasi pemformatan.

Untuk mengatasi string terinterpolasi ke string hasil khusus budaya, gunakan String.Create(IFormatProvider, DefaultInterpolatedStringHandler) metode , yang tersedia dimulai dengan .NET 6. Contoh berikut ini menunjukkan cara melakukannya:

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.

Di .NET 5 dan versi .NET yang lebih lama, gunakan konversi implisit dari string terinterpolasi ke FormattableString instans. Kemudian, Anda dapat menggunakan metode instans FormattableString.ToString(IFormatProvider) atau metode statis FormattableString.Invariant untuk menghasilkan string hasil khusus budaya. Contoh berikut ini menunjukkan cara melakukannya:

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.

Untuk informasi selengkapnya tentang pemformatan kustom, lihat bagian Pemformatan kustom dengan ICustomFormatter dari artikel Tipe pemformatan di .NET .

Sumber daya lainnya

Jika Anda baru mengenal interpolasi string, lihat tutorial interaktif Interpolasi string dalam C#. Anda juga dapat memeriksa Interpolasi string lainnya dalam tutorial C#. Tutorial tersebut menunjukkan cara menggunakan string yang diinterpolasi untuk menghasilkan string yang diformat.

Kompilasi string yang diinterpolasi

Dimulai dengan C# 10 dan .NET 6, pengkompilasi memeriksa apakah string terinterpolasi ditetapkan ke jenis yang memenuhi pola handler string terinterpolasi. Handler string terinterpolasi adalah jenis yang mengonversi string terinterpolasi menjadi string hasil. Ketika string terinterpolasi memiliki jenis string, string tersebut diproses oleh System.Runtime.CompilerServices.DefaultInterpolatedStringHandler. Untuk contoh handler string terinterpolasi kustom, lihat tutorial Menulis handler interpolasi string kustom. Penggunaan handler string terinterpolasi adalah skenario lanjutan, biasanya diperlukan karena alasan performa.

Catatan

Salah satu efek samping dari handler string terinterpolasi adalah bahwa handler kustom, termasuk System.Runtime.CompilerServices.DefaultInterpolatedStringHandler, mungkin tidak mengevaluasi semua ekspresi interpolasi dalam string terinterpolasi di bawah semua kondisi. Itu berarti efek samping dari ekspresi tersebut mungkin tidak terjadi.

Sebelum C# 10, jika string terinterpolasi memiliki jenis string, biasanya diubah menjadi String.Format panggilan metode. Pengompilasi dapat mengganti String.Format dengan String.Concat jika perilaku yang dianalisis akan setara dengan penggabungan.

Jika string yang diinterpolasi memiliki jenis IFormattable atau FormattableString, pengompilasi membuat panggilan ke metode FormattableStringFactory.Create.

Spesifikasi bahasa C#

Untuk informasi selengkapnya, lihat bagian Ekspresi string terinterpolasi dari spesifikasi bahasa C# dan spesifikasi fitur baru berikut ini:

Lihat juga