Interpolasi string dalam C#

Tutorial ini menunjukkan kepada Anda bagaimana cara menggunakan interpolasi string untuk memformat dan menyertakan hasil ekspresi dalam string hasil. Contoh mengasumsikan bahwa Anda sudah terbiasa dengan konsep C# dasar dan pemformatan jenis .NET. Jika Anda baru menggunakan interpolasi string atau pemformatan jenis .NET, lihatlah tutorial interpolasi string interaktif terlebih dahulu. Untuk informasi selengkapnya tentang jenis pemformatan di .NET, lihat Tipe pemformatan di .NET.

Pendahuluan

Untuk mengidentifikasi string literal sebagai string yang diinterpolasi, tambahkan simbol $. Anda dapat menyematkan ekspresi C# valid yang mengembalikan sebuah nilai dalam string terinterpolasi. Dalam contoh berikut ini, segera setelah ekspresi dievaluasi, hasilnya dikonversi menjadi string dan disertakan dalam string hasil:

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);
// Output:
// 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

Seperti yang ditunjukkan di dalam contoh, Anda menyertakan ekspresi dalam string terinterpolasi dengan mengapitnya dengan kurung kurawal:

{<interpolationExpression>}

String terinterpolasi mendukung semua kemampuan fitur pemformatan komposit string. Itu menjadikan mereka sebuah alternatif yang lebih mudah dibaca untuk penggunaan metode String.Format.

Cara menentukan string format untuk sebuah ekspresi interpolasi

Untuk menentukan string format yang didukung oleh jenis hasil ekspresi, ikuti ekspresi interpolasi dengan titik dua (":") dan string format:

{<interpolationExpression>:<formatString>}

Contoh berikut menunjukkan cara menentukan string format standar dan kustom untuk ekspresi yang menghasilkan tanggal dan waktu, atau hasil numerik:

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}.");
// Output:
// On Sunday, November 25, 1731 L. Euler introduced the letter e to denote 2.71828.

Untuk informasi selengkapnya, lihat bagian Komponen string format dari artikel Pemformatan komposit.

Bagaimana cara mengontrol lebar bidang dan perataan ekspresi interpolasi yang diformat

Untuk menentukan lebar bidang minimum dan perataan hasil ekspresi yang diformat, ikuti ekspresi interpolasi dengan koma (",") dan ekspresi konstanta:

{<interpolationExpression>,<alignment>}

Jika nilai perataan adalah positif, hasil ekspresi yang diformat rata kanan; jika negatif, sejajar kiri.

Jika Anda perlu untuk menentukan perataan dan string format, mulailah dengan komponen perataan:

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

Contoh berikut ini menunjukkan cara menentukan perataan dan menggunakan karakter pipa ("|") untuk memisahkan bidang teks:

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}|");
// Output:
// Three classical Pythagorean means of 3 and 4:
// |Arithmetic|  3.500|
// |Geometric|  3.464|
// |Harmonic |  3.429|

Seperti yang ditunjukkan oleh output contoh, jika panjang hasil ekspresi yang diformat melebihi lebar bidang yang ditentukan, maka nilai perataan diabaikan.

Untuk informasi selengkapnya, lihat bagian Komponen perataan dari artikel Pemformatan komposit.

Bagaimana cara menggunakan urutan escape dalam string terinterpolasi

String terinterpolasi mendukung semua urutan escape yang bisa digunakan dalam literal string biasa. Untuk informasi selengkapnya, lihat urutan Escape String.

Untuk menafsirkan urutan escape secara harfiah, manfaatkan string verbatim literal. 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 menyertakan kurung kurawal, "{" atau "}", di dalam string hasil, gunakan dua kurung kurawal, "{{" atau "}}". Untuk informasi selengkapnya, lihat bagian Kurung kurawal pelepasan dari artikel Pemformatan komposit.

Contoh berikut ini menunjukkan cara menyertakan kurung kurawal dalam string hasil dan membuat string terinterpolasi verbatim:

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

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

Dimulai dengan C# 11, Anda dapat menggunakan literal string mentah terinterpolasi.

Cara menggunakan operator ?: bersyarat ternary dalam sebuah ekspresi interpolasi

Karena titik dua (":") memiliki arti khusus di dalam item dengan ekspresi interpolasi, untuk menggunakan operator kondisional dalam ekspresi, sertakan dalam tanda kurung, seperti yang ditunjukkan contoh berikut:

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

Bagaimana cara membuat string hasil khusus budaya dengan interpolasi string

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

Dimulai dengan .NET 6, Anda dapat menggunakan String.Create(IFormatProvider, DefaultInterpolatedStringHandler) metode untuk menyelesaikan string terinterpolasi ke string hasil khusus budaya, seperti yang ditunjukkan contoh berikut:

var cultures = new System.Globalization.CultureInfo[]
{
    System.Globalization.CultureInfo.GetCultureInfo("en-US"),
    System.Globalization.CultureInfo.GetCultureInfo("en-GB"),
    System.Globalization.CultureInfo.GetCultureInfo("nl-NL"),
    System.Globalization.CultureInfo.InvariantCulture
};
var date = DateTime.Now;
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       8/27/2023 12:35:31 PM      31,415,926.536
// en-GB         27/08/2023 12:35:31      31,415,926.536
// nl-NL         27-08-2023 12:35:31      31.415.926,536
//               08/27/2023 12:35:31      31,415,926.536

Dalam versi .NET sebelumnya, gunakan konversi implisit string terinterpolasi ke System.FormattableString instans dan panggil metodenya ToString(IFormatProvider) untuk membuat string hasil khusus budaya. Contoh berikut ini menunjukkan cara melakukannya:

var cultures = new System.Globalization.CultureInfo[]
{
    System.Globalization.CultureInfo.GetCultureInfo("en-US"),
    System.Globalization.CultureInfo.GetCultureInfo("en-GB"),
    System.Globalization.CultureInfo.GetCultureInfo("nl-NL"),
    System.Globalization.CultureInfo.InvariantCulture
};
var date = DateTime.Now;
var number = 31_415_926.536;
FormattableString message = $"{date,23}{number,20:N3}";
foreach (var culture in cultures)
{
    var cultureSpecificMessage = message.ToString(culture);
    Console.WriteLine($"{culture.Name,-10}{cultureSpecificMessage}");
}
// Output is similar to:
// en-US       8/27/2023 12:35:31 PM      31,415,926.536
// en-GB         27/08/2023 12:35:31      31,415,926.536
// nl-NL         27-08-2023 12:35:31      31.415.926,536
//               08/27/2023 12:35:31      31,415,926.536

Seperti yang ditunjukkan contoh, Anda dapat menggunakan satu instans FormattableString untuk menghasilkan beberapa string hasil untuk berbagai budaya.

Bagaimana cara membuat string hasil menggunakan budaya invarian

Dimulai dengan .NET 6, gunakan String.Create(IFormatProvider, DefaultInterpolatedStringHandler) metode untuk menyelesaikan string terinterpolasi ke string hasil untuk InvariantCulture, seperti yang ditunjukkan contoh berikut:

string message = string.Create(CultureInfo.InvariantCulture, $"Date and time in invariant culture: {DateTime.Now}");
Console.WriteLine(message);
// Output is similar to:
// Date and time in invariant culture: 05/17/2018 15:46:24

Dalam versi .NET yang lebih lama, bersama dengan FormattableString.ToString(IFormatProvider) metode , Anda dapat menggunakan metode statis FormattableString.Invariant , seperti yang ditunjukkan contoh berikut:

string message = FormattableString.Invariant($"Date and time in invariant culture: {DateTime.Now}");
Console.WriteLine(message);
// Output is similar to:
// Date and time in invariant culture: 05/17/2018 15:46:24

Kesimpulan

Tutorial ini menjelaskan skenario umum tentang penggunaan interpolasi string. Untuk informasi selengkapnya tentang interpolasi string, lihat Interpolasi string. Untuk informasi selengkapnya tentang jenis pemformatan di .NET, lihat artikel Pemformatan tipe dalam .NET dan Pemformatan komposit.

Lihat juga