Bagikan melalui


String terinterpolasi (Panduan Referensi Visual Basic)

Digunakan untuk membuat string. String terinterpolasi terlihat seperti string templat yang berisi ekspresi terinterpolasi. String terinterpolasi mengembalikan string yang menggantikan ekspresi terinterpolasi yang dikandungnya dengan representasi stringnya. Fitur ini tersedia di Visual Basic 14 dan versi yang lebih baru.

Argumen string terinterpolasi lebih mudah dipahami daripada string format komposit. Misalnya, string terinterpolasi berikut berisi dua ekspresi terinterpolasi, {name} dan {hours:hh}:

Console.WriteLine($"Name = {name}, hours = {hours:hh}")

String format komposit yang setara adalah:

Console.WriteLine("Name = {0}, hours = {1:hh}", name, hours)

Struktur string terinterpolasi adalah:

$"<text> {<interpolated-expression> [,<field-width>] [:<format-string>] } <text> ..."

Lokasi:

  • field-width adalah bilangan bulat bertanda tangan yang menunjukkan jumlah karakter di bidang . Jika positif, bidang selaras dengan kanan; jika negatif, rata kiri.

  • format-string adalah string format yang sesuai untuk jenis objek yang sedang diformat. Misalnya, untuk DateTime nilai, itu bisa menjadi string format tanggal dan waktu standar seperti "D" atau "d".

Penting

Anda tidak dapat memiliki spasi kosong antara $ dan " yang memulai string. Melakukannya menyebabkan kesalahan kompilator.

Anda dapat menggunakan string terinterpolasi di mana saja Anda dapat menggunakan string literal. String terinterpolasi dievaluasi setiap kali kode dengan string terinterpolasi dijalankan. Ini memungkinkan Anda untuk memisahkan definisi dan evaluasi string terinterpolasi.

Untuk menyertakan kurung kurawal ("{" atau "}") dalam string terinterpolasi, gunakan dua kurung kurawal, "{{" atau "}}". Untuk informasi selengkapnya, lihat Konversi implisit.

Jika string terinterpolasi berisi karakter lain dengan arti khusus dalam string terinterpolasi, seperti tanda kutip ("), titik dua (:), atau koma (,), karakter tersebut harus diloloskan jika terjadi dalam teks harfiah. Atau, jika elemen bahasa yang disertakan dalam ekspresi terinterpolasi, elemen tersebut harus disertakan dalam ekspresi yang dibatasi oleh tanda kurung. Contoh berikut menghindari karakter tanda kutip untuk menyertakannya ke dalam string hasil.

Public Module Example
   Public Sub Main()
      Dim name = "Horace"
      Dim age = 34
      Dim s1 = $"He asked, ""Is your name {name}?"", but didn't wait for a reply."
      Console.WriteLine(s1)
      
      Dim s2 = $"{name} is {age:D3} year{If(age = 1, "", "s")} old."
      Console.WriteLine(s2) 
   End Sub
End Module
' The example displays the following output:
'       He asked, "Is your name Horace?", but didn't wait for a reply.
'       Horace is 034 years old.

Konversi implisit

Ada tiga konversi jenis implisit dari string terinterpolasi:

  1. Konversi string terinterpolasi ke String. Contoh berikut mengembalikan string yang ekspresi string terinterpolasinya telah diganti dengan representasi stringnya. Contohnya:

    Public Module Example
       Public Sub Main()
          Dim name = "Bartholomew"
          Dim s1 = $"Hello, {name}!"  
          Console.WriteLine(s1)
       End Sub
    End Module
    ' The example displays the following output:
    '      Hello, Bartholomew!
    ' </Snippet1>
    

    Ini adalah hasil akhir dari interpretasi string. Semua kemunculan kurung kurawal ganda ("{{" dan "}}") dikonversi menjadi kurung kurawal tunggal.

  2. Konversi string yang diinterpolasi ke dalam variabel IFormattable yang memungkinkan Anda membuat beberapa string hasil dengan konten khusus budaya dari satu instance IFormattable. Ini berguna untuk menyertakan hal-hal seperti format numerik dan tanggal yang benar untuk budaya individu. Semua kemunculan kurung kurawal ganda ("{{" dan "}}") tetap sebagai kurung kurawal ganda hingga Anda memformat string dengan memanggil metode ToString() secara eksplisit atau implisit. Semua ekspresi interpolasi yang terkandung dikonversi ke {0}, {1}, dan sebagainya.

    Contoh berikut menggunakan refleksi untuk menampilkan anggota serta nilai bidang dan properti dari variabel IFormattable yang dibuat dari string terinterpolasi. Ini juga meneruskan IFormattable variabel ke Console.WriteLine(String) metode .

    Imports System.Globalization
    Imports System.Reflection
    
    Public Module Example
       Public Sub Main()
          Dim price = 1000
          Dim s2 As IFormattable = $"The cost of this item is {price:C}."  
          ShowInfo(s2)
          CultureInfo.CurrentCulture = New CultureInfo("en-US")
          Console.WriteLine(s2)
          CultureInfo.CurrentCulture = New CultureInfo("fr-FR")
          Console.WriteLine(s2)      
       End Sub
    
       Private Sub ShowInfo(obj As Object)
          Console.WriteLine($"Displaying member information:{vbCrLf}")
          Dim t = obj.GetType()
          Dim flags = BindingFlags.Public Or BindingFlags.Instance Or BindingFlags.Static Or BindingFlags.NonPublic
          For Each m In t.GetMembers(flags) 
             Console.Write($"   {m.Name} {m.MemberType}")   
             If m.MemberType = MemberTypes.Property Then
                Dim p = t.GetProperty(m.Name, flags)
                Console.Write($"   Value: {p.GetValue(obj)}")         
             End If
             If m.MemberType = MemberTypes.Field Then
                Dim f = t.GetField(m.Name, flags)
                Console.Write($"   Value: {f.GetValue(obj)}")
             End If
             Console.WriteLine()
          Next
          Console.WriteLine($"-------{vbCrLf}")
       End Sub
    End Module
    ' The example displays the following output:
    Displaying member information:
    
    '       get_Format Method
    '       GetArguments Method
    '       get_ArgumentCount Method
    '       GetArgument Method
    '       ToString Method
    '       System.IFormattable.ToString Method
    '       ToString Method
    '       Equals Method
    '       GetHashCode Method
    '       GetType Method
    '       Finalize Method
    '       MemberwiseClone Method
    '       .ctor Constructor
    '       Format Property   Value: The cost of this item is {0:C}.
    '       ArgumentCount Property   Value: 1
    '       _format Field   Value: The cost of this item is {0:C}.
    '       _arguments Field   Value: System.Object[]
    '       -------
    '
    '       The cost of this item is $1,000.00.
    '       The cost of this item is 1 000,00 €.
    ' </Snippet1>
    
    

    Perhatikan bahwa string terinterpolasi hanya dapat diperiksa dengan menggunakan pantulan. Jika diteruskan ke metode pemformatan string, seperti WriteLine(String), item formatnya diselesaikan dan string hasil dikembalikan.

  3. Konversi string terinterpolasi ke FormattableString variabel yang mewakili string format komposit. Memeriksa string format komposit dan cara dirender sebagai string hasil dapat, misalnya, membantu Anda melindungi diri dari serangan injeksi saat Anda membuat kueri. A FormattableString juga mencakup:

    Semua kemunculan kurung kurawal ganda ("{{" dan "}}") tetap sebagai kurung kurawal ganda hingga Anda memformat. Semua ekspresi interpolasi yang terkandung dikonversi ke {0}, {1}, dan sebagainya.

    Imports System.Globalization
    
    Public Module Example
       Public Sub Main()
          Dim name = "Bartholomew"
          Dim s3 As FormattableString = $"Hello, {name}!"  
          Console.WriteLine($"String: '{s3.Format}'")
          Console.WriteLine($"Arguments: {s3.ArgumentCount}")
          Console.WriteLine($"Result string: {s3}")
       End Sub
    End Module
    ' The example displays the following output:
    '       String: 'Hello, {0}!'
    '       Arguments: 1
    '       Result string: Hello, Bartholomew!
    
    

Lihat juga