Vb.net 为对象和程序集使用字符串名称

Vb.net 为对象和程序集使用字符串名称,vb.net,object,reflection,assemblies,Vb.net,Object,Reflection,Assemblies,我不擅长反思,我希望我选择了正确的类别。我有一个有趣的问题。我已经使用devexpress reports编写了一份报告。这涉及一行代码,如下所示: lxListData = New System.Collections.Generic.List(Of DLL.Report.ListData) ListData是执行上述行的程序集外部程序集中的报表。上面这一行工作正常,允许我运行报告 我所做的是将此报表的所有信息作为字符串放入一个表中,其中包括类型:“DLL.report.ListData”

我不擅长反思,我希望我选择了正确的类别。我有一个有趣的问题。我已经使用devexpress reports编写了一份报告。这涉及一行代码,如下所示:

lxListData = New System.Collections.Generic.List(Of DLL.Report.ListData) 
ListData是执行上述行的程序集外部程序集中的报表。上面这一行工作正常,允许我运行报告

我所做的是将此报表的所有信息作为字符串放入一个表中,其中包括类型:“DLL.report.ListData”

我需要的是将这个字符串名称更改为上面代码行中使用的类型。我试过:

Dim type1 As Type = System.Reflection.Assembly.LoadWithPartialName("DLL.Report").GetType("DLL.Report.ListData")
然后将上面的行更改为:

lxListData = New System.Collections.Generic.List(Of type1) 
我尝试了一些类似的其他技术。在所有情况下,“type1”变量都不会被视为类型,即使它看起来像是在监视窗口中

如有任何建议,将不胜感激

谢谢, 尼尔

我做了更多的研究,发现这一行:

Dim type1 As Type = System.Reflection.Assembly.LoadWithPartialName("DLL.Report").GetType("DLL.Report.ListData")
它返回变量type1中的sytem.type,而不是DLL.Report.ListData类型。该变量中有两个属性:Name=“ListData”和FullName=“DLL.Report.ListData”。我能够使用type1中的一些方法来获取DLL.Report.ListData的属性,因此type1似乎是指向DLL.Report.ListData的指针。 我的问题是我需要一个类型为DLL.Report.ListData的变量。是否有方法获取全名字符串并返回类型为DLL.Report.ListData而不是“system.type”的内容

Dim list As IList = _
    Ctype(Activator.CreateInstance(GetType(List(Of )).MakeGenericType(type1)), IList)
请记住,因为您是在运行时创建的,所以在编译时不能使用强类型。您所能做的最好是将其设置为
IList

如果要使用强类型列表,另一个选项是使用反射调用泛型方法。方法中完成的工作是强类型的

Dim mi = Me.GetType().GetMethod("CreateList")
Dim gmi = mi.MakeGenericMethod(type1)
Dim list = Ctype(gmi.Invoke(Me, Nothing), IList)

Public Function CreateList(Of T) As List(Of T)
    ' Strongly-typed to `T` in here
    Return New List(Of T)()
End Function

您已经用(一种统计编程语言)标记了这个问题,但它看起来非常像VisualBasic。这需要重新标记吗?谢谢你指出。完成。只需在键盘上随意点击一下:-)谜,谢谢你的回答。我想我应该一次用一种方法。所以我尝试你的第一种方法。这里有一些似乎不起作用的东西。1.将列表(of)后的类型名称留空。我不确定您是否遗漏了类型名称,并希望我知道要输入什么。我真的不能输入任何东西,因为类型是我试图创建的。我需要创建一个类型为“DLL.Report.ListData”的类型变量。现在我所拥有的只是Type1中指向该类型的指针。在任何情况下,类型名丢失都会导致编译错误。这消除了编译错误。然后发生的是,在运行时,我得到一个错误,告诉我可以使用MakeGenericType,因为Type1不是泛型类型,而不是:-)。对不起,我错过了任何信息。我正在努力理解这一切。我还将添加它,而不是使用以下行:System.Reflection.Assembly.LoadWithPartialName(“DLL.Report”).GetType(“DLL.Report.ListData”),以获取我在回答最后一个问题后使用的指针类型。我突然想到,我可能需要为泛型导入名称空间。我是对的。这让我克服了我的问题。谢谢