2011-10-10 46 views
0

我正在开发VS2008的vb.net程序。在我的情况下,dt_list是List(单个)的实例成员。当我写GetType未定义?

dt_list = CType(ser2.Deserialize(r), dt_list.GetType())

VS2008抱怨“Type'dt_list.GetType()'未定义。”

为什么?提前致谢。

+0

dt_list是如何定义的? –

+0

@ Hand-E-Food dt_list是一个实例成员列表(单个) – Grissiom

+0

对不起,我完全是盲目的,显然。 –

回答

1

不允许的原因是GetType()的类型的确切值必须在运行时确定。 CType的第二个参数只能是“在Dim语句的As子句中合法的表达式,即任何数据类型,对象,结构,类或接口的名称”,例如List(Of String),它可以在编译时确定。

以下是法律相应:

dt_list = CType(ser2.Deserialize(r), List(Of Single)) 

编辑:

铸造为任意类型,其中类型不是在编译时已知,是更复杂的,但是。在MSDN论坛中对this question提出的答案显示了一种方法。虽然它是用C#编写的,但我猜也可以在VB.NET中使用同样的方法。

+0

所以,简而言之,GetType是一个运行时例程,而CType需要一个编译时间参数。有没有办法做动态投射? – Grissiom

0

你想通过在运行时选择转换类型来实现什么?

您可能可以通过界面解决您的问题。

Dim dt_list As IList = Ctype(ser2.Deserialize(r), IList) 

这使您可以访问IList中的所有列表成员。