在VB.NET中,CType可用于将一种类型转换为另一种类型。VB.NET中的CType具有动态第二个参数(类型)
CType(expression,type)
我有存储在实例对象类中的“表达式”,如"objExp"
。 我有存储在Type类的实例中的“类型”,比如"objType"
。
我正在尝试CType(objExp, objType)
我收到编译错误,该怎么办?在运行时提取并分配“objType
”。
在VB.NET中,CType可用于将一种类型转换为另一种类型。VB.NET中的CType具有动态第二个参数(类型)
CType(expression,type)
我有存储在实例对象类中的“表达式”,如"objExp"
。 我有存储在Type类的实例中的“类型”,比如"objType"
。
我正在尝试CType(objExp, objType)
我收到编译错误,该怎么办?在运行时提取并分配“objType
”。
这根本不可能。该CType
表达必须通过一个Type
实例,它是在像Integer
,String
等编译时已知...它不接受它的类型是Type
的值如果没有意义投对象的变量类型(在编译时未知的类型)。铸造的重点是指定确切的类型。不过,我怀疑,而不是使用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
这与CType(x,MyType2)主要有何不同?更多的打字 - 相同的结果。在泛型和CType中都必须在编译时知道类型。 – Neolisk 2014-02-09 22:52:14
@Neilisk,即使在编译时,你是正确的,类型必须为泛型类型所知,但类型是由调用者而不是泛型方法本身指定的。正如我在答案中所说的,我展示的示例方法是毫无意义的。它仅仅是为了演示泛型类型如何工作。 – 2014-02-09 23:01:18
你查的方法CTypeDynamic()?第二个参数(即:类型)可以动态设置。当你使用反射时非常有用。
例如:
CTypeDynamic(strValueToConvert, objTypeToConvertTo)
这个答案适合我。这不是最好的答案? – Arvin 2014-06-13 08:50:26
那么,出于某种原因,'CTypeDynamic'的返回类型是'Object',这是不幸的,但显然是不可避免的。 – 2014-10-10 15:50:16
完美的作品! – HumbleBeginnings 2016-01-27 22:38:44
'CType'是用来告诉编译器,其类型,其目的在于,所以'expression'和'type'必须是已知的**在编译时**。但是,你会得到什么错误? – 2013-03-06 16:08:44
如果直到运行时才知道结果,那么你会存储结果吗?对于这种转换,您可以简单地依赖** System.Convert.ChangeType **。这是另一个XY问题吗? – 2013-03-06 16:09:10
@TimSchmelter,错误是“类型'objType'未定义” – Brij 2013-03-06 16:12:24