2008-10-30 64 views
14

我希望能夠在只在運行時知道類型的地方動態地轉換值。事情是這樣的:在VB.NET中鑄造

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

包含類型值作爲參數傳遞,也從數據庫中讀取,並將該值存儲在數據庫中的字符串的字符串。

這可能嗎?

回答

7

當然,但myvalue將不得不被定義爲類型Object,你不一定要這樣。也許這是一種更好的仿製藥。

什麼決定了將使用什麼類型?

+0

只是一個字符串,指示類型「字符串」,「整數」,「布爾」 – Youssef 2008-10-30 19:52:04

4

那麼,你如何確定哪種類型是必需的?正如Joel所說,這可能是泛型的一種情況。問題是:因爲在編譯時你不知道類型,所以無法處理返回的值,所以在這裏鑄造沒有意義。

2

也許不是動態地轉換某些東西(這似乎不起作用),而是可以使用反射。獲取和調用特定的方法或屬性很容易。

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

這不是很漂亮,但你可以在一行而不是那麼多的做一些。

5

這是最簡單的方法。我用多種類型測試過它。

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 

這是一個有點哈克,但它的工作原理。