2008-10-30 104 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 

这是一个有点哈克,但它的工作原理。