İlişkili Dizeler (Visual Basic Başvurusu)

Dizeleri oluşturmak için kullanılır. İlişkili bir dize, ilişkilendirilmiş ifadeler içeren bir şablon dizesine benzer. İlişkili bir dize, içerdiği ilişkilendirilmiş ifadeleri dize gösterimleriyle değiştiren bir dize döndürür. Bu özellik Visual Basic 14 ve sonraki sürümlerde kullanılabilir.

İlişkili bir dizenin bağımsız değişkenlerini anlamak bileşik biçim dizesinden daha kolaydır. Örneğin, ilişkilendirilmiş dize

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

'{name}' ve '{hours:hh}' adlı iki ilişkilendirilmiş ifade içeriyor. Eşdeğer bileşik biçim dizesi şöyledir:

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

İlişkili bir dizenin yapısı şöyledir:

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

konumu:

  • alan genişliği , 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

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

Dize değişmez değeri kullanabileceğiniz her yerde ilişkilendirilmiş 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.

İlişkili dizeye küme ayracı ("{" veya "}") eklemek için iki küme ayracı kullanın: "{{" veya "}}". Diğer ayrıntılar için Örtük Dönüştürmeler bölümüne bakın.

İlişkilendirilen dizede tırnak işareti ("), iki nokta üst üste (:) veya virgül (,) gibi özel anlamı olan başka karakterler varsa, bunlar değişmez metinde oluşursa kaçış karakterinden çıkarılmalı veya ilişkilendirilmiş 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

İlişkili bir dizeden üç örtük tür dönüştürmesi vardır:

  1. İlişkili bir dizenin öğesine Stringdö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. Çift küme ayraçlarının ("{{" ve "}}") tüm oluşumları tek bir küme ayracına dönüştürülür.

  2. İlişkili bir dizenin, tek IFormattable bir IFormattable örnekten kültüre özgü içerikle birden çok sonuç dizesi oluşturmanıza olanak tanıyan bir değişkene 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ı, siz dizeyi açıkça veya örtük olarak yöntemini çağırarak ToString() biçimlendirene kadar çift küme ayracı olarak kalır. İçeren tüm ilişkilendirme ifadeleri , {1}vb. olarak {0}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 değişkeni yöntemine Console.WriteLine(String) geçirirIFormattable.

    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>
    
    

    İlişkili dizenin yalnızca yansıma kullanılarak denetlenebileceğ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. İlişkili bir dizenin bileşik biçim 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 , {1}vb. olarak {0}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.