İlişkili Dizeler (Visual Basic Başvurusu)
Dize oluşturmak için kullanılır. İlişkili dize, irdelenmiş ifadeler içeren bir şablon dizesine benzer. İlişkili dize, içerdiği irdelenmiş ifadeleri dize gösterimleriyle değiştiren bir dize döndürür. Bu özellik 14 ve Visual Basic 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, irdelenmiş dize
Console.WriteLine($"Name = {name}, hours = {hours:hh}")
, '{name}' ve '{hours:hh}' adlı irdelenmiş iki ifade içerir. Eşdeğer bileşik biçim dizesi şu şekildedir:
Console.WriteLine("Name = {0}, hours = {1:hh}", name, hours)
İlişkili bir dizenin yapısı şöyledir:
$"<text> {<interpolated-expression> [,<field-width>] [:<format-string>] } <text> ..."
burada:
alan genişliği, alanda yer alan karakter sayısını gösteren imzalı bir tamsayıdır. Bu pozitifse alan sağa hizalanır; negatif ise sola hizalı.
format-string, biçimlendir olunan nesnenin 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
ve arasında dizeyi başlatan $ boşluk " olamaz. Bunu yapmak derleyici hatasına neden olur.
Bir dize değişmez değeri kullanabileceğiniz her yerde irdelenmiş bir dize kullanabilirsiniz. İlişkili dize, irdelenmiş dizeyle kod her yürütülürken değerlendirilir. Bu, irdelenmiş bir dizenin tanımını ve değerlendirmesini ayırmaya olanak sağlar.
İlişkili bir dizeye küme ayracı ("{" veya "}") eklemek için "{{" veya "}}" şeklinde iki küme ayracı kullanın. Diğer ayrıntılar için Örtülü Dönüştürmeler bölümüne bakın.
İlişkili dize tırnak işareti ("), iki nokta üst üste (:) veya virgül (,) gibi özel anlamı olan başka karakterler içeriyorsa, sabit metinde oluşursa bunlar kaçmalıdır veya irdelenmiş bir ifadeye dahil edilen dil öğeleri ise parantezle ayrılmış bir ifadeye dahil edilirler. Aşağıdaki örnek, bunları sonuç dizesine eklemek için tırnak işaretlerini kaçış karakteriyle döndürür:
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ülü Dönüştürmeler
İlişkili bir dizeden üç örtülü tür dönüştürmesi vardır:
İlişkili bir dizenin bir değerine String dönüştürme. Aşağıdaki örnek, irdelenmiş dize ifadeleri dize gösterimleriyle değiştirilmiş bir dize döndürür. Örnek:
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 yorumlamanın son sonucutur. Çift küme ayraçlarının ("{{" ve "}}") tüm oluşumları tek küme ayracına dönüştürülür.
Tek bir örnekten kültüre özgü içeriğe sahip birden çok sonuç dizesi oluşturmanıza olanak IFormattable sağlayan, irdelenmiş bir dizenin bir değişkene IFormattable dönüştürmesi. Bu, tek tek kültürler için doğru sayısal ve tarih biçimleri gibi şeyler dahil olmak üzere yararlıdır. Çift küme ayraçlarının ("{{" ve "}}") tüm oluşumları, siz dizeyi açıkça veya örtülü olarak çağırana kadar çift küme ayracı olarak ToString() kalır. Tüm içerdiği ilişkilendirme ifadeleri , ve gibi {0} {1} ifadelere dönüştürülür.
Aşağıdaki örnekte, irdelenmiş bir dizeden oluşturulan bir değişkenin alan ve özellik değerlerinin yanı sıra üyeleri görüntülemek IFormattable için yansıma kullanılır. Ayrıca değişkeni IFormattable yöntemine Console.WriteLine(String) de iletir.
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 incelene bir dize olduğunu unutmayın. gibi bir dize biçimlendirme yöntemine geçirilirse, WriteLine(String) biçim öğeleri çözümlenir ve sonuç dizesi döndürülür.
İlişkili bir dizenin bileşik biçim FormattableString dizesini temsil eden bir değişkene dönüştürme. Bileşik biçim dizesini incelemek ve sonuç dizesi olarak nasıl işlendiklerine bakarak, örneğin bir sorgu oluşturursanız ekleme saldırısına karşı korumanıza yardımcı olabilir. A FormattableString ayrıca şunları içerir:
için ToString() bir sonuç dizesi üreten bir aşırı CurrentCulture yükleme.
Invariantiçin bir dize üreten bir InvariantCulture yöntem.
Belirtilen ToString(IFormatProvider) kültür için sonuç dizesi üreten bir yöntem.
Çift küme ayraçlarının ("{{" ve "}}") tüm oluşumları siz biçimlendirene kadar çift küme ayracı olarak kalır. Tüm içerdiği ilişkilendirme ifadeleri , ve gibi {0} {1} ifadelere 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!