我希望能夠在只在運行時知道類型的地方動態地轉換值。事情是這樣的:在VB.NET中鑄造
myvalue = CType(value, "String, Integer or Boolean")
包含類型值作爲參數傳遞,也從數據庫中讀取,並將該值存儲在數據庫中的字符串的字符串。
這可能嗎?
我希望能夠在只在運行時知道類型的地方動態地轉換值。事情是這樣的:在VB.NET中鑄造
myvalue = CType(value, "String, Integer or Boolean")
包含類型值作爲參數傳遞,也從數據庫中讀取,並將該值存儲在數據庫中的字符串的字符串。
這可能嗎?
當然,但myvalue
將不得不被定義爲類型Object
,你不一定要這樣。也許這是一種更好的仿製藥。
什麼決定了將使用什麼類型?
那麼,你如何確定哪種類型是必需的?正如Joel所說,這可能是泛型的一種情況。問題是:因爲在編譯時你不知道類型,所以無法處理返回的值,所以在這裏鑄造沒有意義。
也許不是動態地轉換某些東西(這似乎不起作用),而是可以使用反射。獲取和調用特定的方法或屬性很容易。
Dim t As Type = testObject.GetType()
Dim prop As PropertyInfo = t.GetProperty("propertyName")
Dim gmi As MethodInfo = prop.GetGetMethod()
gmi.Invoke(testObject, Nothing)
這不是很漂亮,但你可以在一行而不是那麼多的做一些。
這是最簡單的方法。我用多種類型測試過它。
Sub DoCast(ByVal something As Object)
Dim newSomething = Convert.ChangeType(something, something.GetType())
End Sub
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
這是一個有點哈克,但它的工作原理。
只是一個字符串,指示類型「字符串」,「整數」,「布爾」 – Youssef 2008-10-30 19:52:04