VB.NET中的CType与动态第二参数(类型)

时间:2013-03-06 16:05:56

标签: .net vb.net casting

在VB.NET中,CType可用于将一种类型转换为另一种类型。

CType(expression,type)

我将“表达式”存储在实例对象类中,比如"objExp"。 我将“类型”存储在Type类的实例中,比如"objType"

我正在尝试CType(objExp, objType) 我收到编译错误,我该怎么办呢? “objType”在运行时被提取并分配。

3 个答案:

答案 0 :(得分:18)

您是否研究过方法CTypeDynamic()?第二个参数(即:Type)可以动态设置。非常适合您使用Reflection。

例如:

CTypeDynamic(strValueToConvert, objTypeToConvertTo)

答案 1 :(得分:1)

这根本不可能。 CType表达式必须传递Type实例,该实例在编译时已知,如IntegerString等...它不接受类型为{的值{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