Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Anonim türler, özelliklerin veri türlerini doğrudan belirtmek için herhangi bir mekanizma sağlamaz. Tüm özelliklerin türleri çıkarılır. Aşağıdaki örnekte, Name ve Price türleri, bunları başlatmak için kullanılan değerlerden doğrudan çıkarsanır.
' Variable product is an instance of a simple anonymous type.
Dim product = New With {Key .Name = "paperclips", .Price = 1.29}
Anonim türler, diğer kaynaklardan özellik adlarını ve türlerini de çıkarabilir. Aşağıdaki bölümlerde çıkarım mümkün olan koşulların listesi ve olmadığı durum örnekleri sağlanır.
Başarılı Sonuç Çıkarma
Anonim türler, aşağıdaki kaynaklardan özellik adlarını ve türlerini çıkarabilir:
Değişken adlarından. Anonim türün
anonProductveproductNameolmak üzere iki özelliğiproductPriceolacaktır. Veri türleri sırasıyla özgün değişkenlerinStringveDoubleolacaktır.Dim productName As String = "paperclips" Dim productPrice As Double = 1.29 Dim anonProduct = New With {Key productName, Key productPrice} ' To create uppercase variable names for the new properties, ' assign variables productName and productPrice to uppercase identifiers. Dim anonProduct1 = New With {Key .Name = productName, Key .Price = productPrice}Diğer nesnelerin özellik veya alan adlarından. Örneğin,
carveCarClassözelliklerini içeren birNametürIDnesnesi düşünün. Yeni bir anonim tür örneğicar1oluşturmak için,NameveIDözelliklericarnesnesinden alınan değerlerle başlatılarak aşağıdakileri yazabilirsiniz:Dim car1 = New With {Key car.Name, Key car.ID}Önceki bildirim, anonim türü
car2tanımlayan daha uzun kod satırına eşdeğerdir.Dim car2 = New With {Key .Name = car.Name, Key .ID = car.ID}XML'den alınan üye isimleri.
Dim books = <Books> <Book Author="Jesper Aaberg"> Advanced Programming Methods </Book> </Books> Dim anon = New With {books...<Book>}Sonuçta elde edilen tür için
anon,Book(Of XElement) türüne sahip bir özellik olan IEnumerable olacaktır.Aşağıdaki örnekte olduğu gibi
SomeFunctionparametresi olmayan bir işlevden.Dim sc As New SomeClass Dim anon1 = New With {Key sc.SomeFunction()}Aşağıdaki koddaki değişken
anon2, adlıFirstbir karakter olan tek özelliği olan anonim bir türdür. Bu kod, işlevi Firsttarafından döndürülen "E" harfini görüntüler.Dim aString As String = "Example String" Dim anon2 = New With {Key aString.First()} ' The variable anon2 has one property, First. Console.WriteLine(anon2.First)
Çıkarım Hataları
Ad çıkarımı aşağıdakiler de dahil olmak üzere birçok durumda başarısız olur:
Çıkarım, bağımsız değişken gerektiren bir yöntemin, oluşturucunun veya parametreli özelliğin çağrılmasından türetilir.
anon1bir veya daha fazla bağımsız değişkene sahipse,someFunctionönceki bildirim başarısız olur.' Not valid. ' Dim anon3 = New With {Key sc.someFunction(someArg)}Yeni bir özellik adı atanması sorunu çözer.
' Valid. Dim anon4 = New With {Key .FunResult = sc.someFunction(someArg)}Çıkarım, karmaşık bir ifadeden türetilir.
Dim aString As String = "Act " ' Not valid. ' Dim label = New With {Key aString & "IV"}Hata, ifadenin sonucu bir özellik adına atanarak çözülebilir.
' Valid. Dim label1 = New With {Key .someLabel = aString & "IV"}Birden çok özellik için çıkarım, aynı ada sahip iki veya daha fazla özellik üretir. Önceki örneklerde yer alan bildirimlere geri dönerek, hem hem de
product.Namecar1.Nameözelliklerini aynı anonim türün özellikleri olarak listeleyemezsiniz. Bunun nedeni, her biri için çıkarılan tanımlayıcınınNameolmasıdır.' Not valid. ' Dim anon5 = New With {Key product.Name, Key car1.Name}Bu sorun, değerlerin ayrı özellik adlarına atanarak çözülebilir.
' Valid. Dim anon6 = New With {Key .ProductName = product.Name, Key .CarName = car1.Name}Büyük/küçük harflerdeki değişikliklerin (büyük ve küçük harfler arasındaki değişiklikler) iki ismi farklı yapmadığını unutmayın.
Dim price = 0 ' Not valid, because Price and price are the same name. ' Dim anon7 = New With {Key product.Price, Key price}Bir özelliğin başlangıç türü ve değeri henüz oluşturulmamış başka bir özelliğe bağlıdır. Örneğin,
.IDName = .LastNameönceden başlatılmadığı sürece.LastNameanonim tür bildiriminde geçerli değildir.' Not valid. ' Dim anon8 = New With {Key .IDName = .LastName, Key .LastName = "Jones"}Bu örnekte, özelliklerin bildirildiği sırayı tersine çevirme yoluyla sorunu çözebilirsiniz.
' Valid. Dim anon9 = New With {Key .LastName = "Jones", Key .IDName = .LastName}Anonim türün özellik adı, üyesinin adıyla Objectaynıdır. Örneğin, aşağıdaki bildirim,
EqualsObject'ün bir yöntemi olduğundan başarısız olur.' Not valid. ' Dim relationsLabels1 = New With {Key .Equals = "equals", Key .Greater = _ ' "greater than", Key .Less = "less than"}Özellik adını değiştirerek sorunu çözebilirsiniz:
' Valid Dim relationsLabels2 = New With {Key .EqualString = "equals", Key .GreaterString = "greater than", Key .LessString = "less than"}