Aracılığıyla paylaş


Ara Değer Verilen Dizeler (Visual Basic Referansı)

Dizeleri oluşturmak için kullanılır. Interpolasyonlu bir dizge, interpolasyonlu ifadeler içeren bir şablon dizgesine benzer. İçeriğindeki interpolasyon ifadelerini dize gösterimleriyle değiştirerek bir dize döndüren interpolasyonlu bir dize. Bu özellik Visual Basic 14 ve sonraki sürümlerde kullanılabilir.

Interpolasyonlu bir dizenin bağımsız değişkenlerini anlamak, bileşik biçim dizesinin bağımsız değişkenlerini anlamaktan daha kolaydır. Örneğin, aşağıdaki ilişkilendirilmiş dize iki ilişkilendirilmiş ifade {name} içerir ve {hours:hh}:

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

Eşdeğer bileşik biçim dizesi şöyledir:

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

Bir interpolasyonlu dizenin yapısı şöyledir:

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

Nerede:

  • field-width , alandaki karakter sayısını gösteren imzalı bir tamsayıdır. Pozitifse, alan sağa hizalanır; negatifse, sola hizalı.

  • format-string , biçimlendirilmekte olan nesne türüne uygun bir biçim dizesidir. Örneğin, bir DateTime değer için "D" veya "d" gibi standart bir tarih ve saat biçimi dizesi olabilir.

Önemli

Dizeyi başlatan $ ve " arasında boşluk olamaz. Bunun yapılması derleyici hatasına neden olur.

Dize sabiti kullanabileceğiniz her yerde iç içe bir dize kullanabilirsiniz. İlişkilendirilen dize, ilişkilendirilmiş dizeye sahip kod her yürütülürken değerlendirilir. Bu, ilişkilendirilmiş bir dizenin tanımını ve değerlendirmesini ayırmanıza olanak tanır.

Bir interpolasyonlu dizeye küme ayracı ("{" veya "}") eklemek için iki küme ayracı kullanın: "{{" veya "}}". Daha fazla bilgi için bkz. Örtük dönüştürmeler.

İnterpolasyon dizesi, kendisinde tırnak işareti ("), iki nokta üst üste (:) veya virgül (,) gibi özel anlamlara sahip başka karakterler içeriyorsa, metnin kendisinde yer alırlarsa kaçırılması gerekir. Öte yandan, bunlar ilişkilendirilmiş bir ifadeye dahil edilen dil öğeleriyse, parantezler ile sınırlandırılmış bir ifadeye dahil edilmelidir. Aşağıdaki örnek, tırnak işaretlerini sonuç dizesine eklemek için çıkış yapar:

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.

Örtük dönüştürmeler

İç içe geçmiş bir dizeden üç örtük tür dönüşümü vardır.

  1. Birleştirilmiş bir dizenin String türüne dönüştürülmesi. Aşağıdaki örnek, ilişkilendirilmiş dize ifadeleri dize gösterimleriyle değiştirilen bir dize döndürür. Örneğin:

    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>
    

    Bu, dize yorumlamasının son sonucudur. "{{" ve "}}" çift küme ayraçlarının tüm örnekleri tek bir küme ayracına dönüştürülür.

  2. Interpolasyonlu bir dizenin, tek bir IFormattable örneğinden kültüre özgü içerikle birden çok sonuç dizesi oluşturmanıza olanak tanıyan IFormattable değişkenine dönüştürülmesi. Bu, tek tek kültürler için doğru sayısal ve tarih biçimleri gibi öğeleri dahil etmede yararlıdır. Çift küme ayraçlarının ("{{" ve "}}") tüm oluşumları, ToString() yöntemini açıkça veya örtük olarak çağırarak dizeyi biçimlendirene kadar çift küme ayracı olarak kalır. İçeren tüm ilişkilendirme ifadeleri , {0}vb. olarak {1}dönüştürülür.

    Aşağıdaki örnek, üyelerin yanı sıra ilişkilendirilmiş dizeden oluşturulan bir IFormattable değişkenin alan ve özellik değerlerini görüntülemek için yansımayı kullanır. Ayrıca IFormattable değişkenini Console.WriteLine(String) yöntemine geçirir.

    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>
    
    

    Ara değer dizelerinin yalnızca yansıtma kullanılarak incelenebileceğini unutmayın. gibi WriteLine(String)bir dize biçimlendirme yöntemine geçirilirse, biçim öğeleri çözümlenir ve sonuç dizesi döndürülür.

  3. Ara konumlanmış bir dizenin bileşik format dizesini temsil eden bir FormattableString değişkene dönüştürülmesi. Bileşik biçim dizesini ve sonuç dizesi olarak nasıl işlendiğini incelemek, örneğin sorgu oluşturuyorsanız ekleme saldırısına karşı korumanıza yardımcı olabilir. A FormattableString ayrıca şunları içerir:

    Çift küme ayraçlarının ("{{" ve "}}") tüm oluşumları, siz biçimlendirene kadar çift küme ayracı olarak kalır. İçeren tüm ilişkilendirme ifadeleri , {0}vb. olarak {1}dönüştürülür.

    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!
    
    

Ayrıca bkz.