我正在开发VS2008的vb.net程序。在我的情况下,dt_list是List(单个)的实例成员。当我写GetType未定义?
dt_list = CType(ser2.Deserialize(r), dt_list.GetType())
VS2008抱怨“Type'dt_list.GetType()'未定义。”
为什么?提前致谢。
我正在开发VS2008的vb.net程序。在我的情况下,dt_list是List(单个)的实例成员。当我写GetType未定义?
dt_list = CType(ser2.Deserialize(r), dt_list.GetType())
VS2008抱怨“Type'dt_list.GetType()'未定义。”
为什么?提前致谢。
不允许的原因是GetType()
的类型的确切值必须在运行时确定。 CType的第二个参数只能是“在Dim语句的As子句中合法的表达式,即任何数据类型,对象,结构,类或接口的名称”,例如List(Of String)
,它可以在编译时确定。
以下是法律相应:
dt_list = CType(ser2.Deserialize(r), List(Of Single))
编辑:
铸造为任意类型,其中类型不是在编译时已知,是更复杂的,但是。在MSDN论坛中对this question提出的答案显示了一种方法。虽然它是用C#编写的,但我猜也可以在VB.NET中使用同样的方法。
所以,简而言之,GetType是一个运行时例程,而CType需要一个编译时间参数。有没有办法做动态投射? – Grissiom
你想通过在运行时选择转换类型来实现什么?
您可能可以通过界面解决您的问题。
Dim dt_list As IList = Ctype(ser2.Deserialize(r), IList)
这使您可以访问IList中的所有列表成员。
dt_list是如何定义的? –
@ Hand-E-Food dt_list是一个实例成员列表(单个) – Grissiom
对不起,我完全是盲目的,显然。 –