2008-10-30 23 views
14

Türün yalnızca çalışma zamanında bilindiği bir yerde dinamik olarak değer atamak istiyorum. Böyle bir şey:VB.NET'te Döküm

myvalue = CType(value, "String, Integer or Boolean") 

bağımsız değişken olarak geçirilen tip değeri içerir ve aynı zamanda bir veritabanından okunur ve değer veritabanında dize olarak saklanır dize.

Bu mümkün mü?

cevap

7

Elbette, ancak myvalueObject türünden tanımlanmalıdır ve bunu istemezsiniz. Belki de bu jenerikler tarafından daha iyi sunulan bir durumdur.

Hangi türün kullanılacağını belirleyen nedir?

+0

Sadece "String", "integer", "boolean" türlerini gösteren bir dize – Youssef

+0

Ardından hangi dizeyi ayarlar? –

+0

dizesi, – Youssef

4

Hangi türden gerekli olduğunu nasıl belirlersiniz? Joel'in dediği gibi, bu muhtemelen jenerikler için bir durumdur. Mesele şu ki: derleme zamanında türü bilmediğinizden, geri döndürülen değeri kullanamazsınız, bu yüzden döküm işlemi burada gerçekten anlam ifade etmiyor.

2

Belki de bir şeyleri dinamik olarak çevirmek yerine (işe yaramıyor gibi görünüyor) bunun yerine yansımayı kullanabilirsiniz. Belirli yöntemleri veya özellikleri almak ve çağırmak için yeterince kolaydır.

Dim t As Type = testObject.GetType() 
Dim prop As PropertyInfo = t.GetProperty("propertyName") 
Dim gmi As MethodInfo = prop.GetGetMethod() 
gmi.Invoke(testObject, Nothing) 

Bu hoş değil ama bunlardan birçoğunu tek bir satırda yapabilirsiniz.

5

Bunu yapmanın en kısa yolu budur. Birden çok türle test ettim.

Sub DoCast(ByVal something As Object) 

    Dim newSomething = Convert.ChangeType(something, something.GetType()) 

End Sub 
9
Dim bMyValue As Boolean 
Dim iMyValue As Integer 
Dim sMyValue As String 
Dim t As Type = myValue.GetType 


Select Case t.Name 
    Case "String" 
     sMyValue = ctype(myValue, string) 
    Case "Boolean" 
     bMyValue = ctype(myValue, boolean) 
    Case "Integer" 
     iMyValue = ctype(myValue, Integer) 
End Select 

Biraz hacky var ama işe yarıyor.