Bagikan melalui


String Terinterpolasi (Referensi Visual Basic)

Digunakan untuk membuat string. Ekspresi string terinterpolasi terlihat seperti string templat yang berisi ekspresi terinterpolasi. String terinterpolasi mengembalikan string yang menggantikan ekspresi terinterpolasi yang dikandungnya dengan representasi string mereka. 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

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

berisi dua ekspresi terinterpolasi, '{name}' dan '{hours:hh}'. String format komposit yang setara adalah:

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

Struktur string yang diinterpolasi adalah:

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

di mana:

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

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

Penting

Tidak boleh ada white space di antara $ dan " yang memulai string literal. Panggilan menyebabkan kesalahan compiler.

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 "}}". Lihat bagian Konversi Implisit untuk detail selengkapnya.

Jika string terinterpolasi berisi karakter lain dengan arti khusus dalam string terinterpolasi, seperti tanda kutip ("), titik dua (:), atau koma (,), karakter tersebut harus dilewati jika terjadi dalam teks harfiah, atau harus disertakan dalam ekspresi yang dibatasi oleh tanda kurung jika merupakan elemen bahasa yang disertakan dalam ekspresi terinterpolasi. Contoh berikut lolos dari tanda kutip untuk menyertakannya 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 implisit dari string yang diinterpolasi:

  1. Konversi string yang diinterpolasi 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 variabel IFormattable yang juga memungkinkan Anda membuat beberapa string hasil dengan konten khusus budaya dari satu instans 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 secara eksplisit atau implisit memanggil metode ToString(). Semua ekspresi interpolasi yang terkandung dikonversi ke {0}, {1}, dan sebagainya.

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

    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 variabel FormattableString yang mewakili string format komposit. Memeriksa string format komposit dan bagaimana string tersebut dirender sebagai string hasil mungkin, misalnya, membantu Anda melindungi dari serangan injeksi jika Anda membuat kueri. 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