使用列表中的元素(类型)分配变量类型

时间:2018-05-04 17:51:28

标签: .net vb.net

我们假设你有以下三个课程:a,b和c。

我想将这些类(不是这些类的实例)添加到稍后要使用的泛型类型列表中。

是否可以使用此列表中的一个元素作为类型声明另一个变量?

如下所示。

其中" obj"成为任何类型的实例" t"是

我不确定该问题的标题是什么,所以请您自由编辑,以便清晰。

Class a
    Public gI As String
End Class

Class b
    Public gI As String
End Class

Class c
   Public gI As String
End Class

Class main
    Sub new()
        Dim types As New List(Of Type)
        types.Add(GetType(a))
        types.Add(GetType(b))
        types.Add(GetType(c))

        For Each t As Type In types
            Dim obj As GetType(t) 'I cannot seem to get this line to work
            Console.WriteLine(obj.GetType)
            'Output should be 
            'a
            'b
            'c  
        Next
    end sub
End Class

2 个答案:

答案 0 :(得分:3)

Dim obj As GetType(t)

变为

Dim obj As Object = t.GetConstructor(Type.EmptyTypes).Invoke(Nothing)

因为你没有定义一个接口或基类,所以没有"类型"表示除了Object之外的a,b和c。

因为它是一个实例,你必须实例化它,所以代码找到默认的构造函数并实例化它

答案 1 :(得分:0)

嘿,你已经拥有它了。您已经使用GetType来填充列表。您现在再次尝试GetType?

只需迭代列表并直接返回对象 - 已经是... a Type:

Public Module Module1

Class a
    Public gI As String
End Class

Class b
    Public gI As String
End Class

Class c
   Public gI As String
End Class

Public Sub Main()
    Dim types As New List(Of Type)
    types.Add(GetType(a))
    types.Add(GetType(b))
    types.Add(GetType(c))

    For Each t As Type In types
        Console.WriteLine(t)
    Next
End Sub

End Module

这是一张带输出的图片: enter image description here