我希望能够在只在运行时知道类型的地方动态地转换值。事情是这样的:在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