在VB.NET中,CType可用于将一种类型转换为另一种类型。
CType(expression,type)
我将“表达式”存储在实例对象类中,比如"objExp"
。
我将“类型”存储在Type类的实例中,比如"objType"
。
我正在尝试CType(objExp, objType)
我收到编译错误,我该怎么办呢? “objType
”在运行时被提取并分配。
答案 0 :(得分:18)
您是否研究过方法CTypeDynamic()?第二个参数(即:Type)可以动态设置。非常适合您使用Reflection。
例如:
CTypeDynamic(strValueToConvert, objTypeToConvertTo)
答案 1 :(得分:1)
这根本不可能。 CType
表达式必须传递Type
实例,该实例在编译时已知,如Integer
,String
等...它不接受类型为{的值{1}}
答案 2 :(得分:0)
如果将对象强制转换为变量类型(在编译时未知的类型)是没有意义的。铸造的全部要点是指定确切的类型。但我怀疑,不是使用Type
对象,而是真正需要的是泛型方法或泛型类。例如:
Public Function DoSomethingGenerically(Of T)(MyParameter As MyType) As T
Return CType(MyParameter.MyProperty, T)
End Function
这是一个非常无意义的方法,因为它所做的只是强制转换属性并将其作为该类型返回,但它显示了如何在不知道具体发生T
的情况下强制转换为T
成为。然后,你可以这样称呼它:
Dim x As New MyType()
Dim y As MyType2 = DoSomethingGenerically(Of MyType2)(x)
这正是List(Of T)
类和其他类似泛型类的实现方式。除了使单个方法通用之外,它们使整个类成为通用的,例如:
Public Class MyList(Of T)
Public Sub Add(item As T)
' ...
End Sub
End Class