通用声明中的System.Type实例 VB.NET或C#[英] System.Type instance in generic declaration VB.NET or C#

问题描述

我很难过.请帮忙!我已经用谷歌搜索到我的手指受伤了!

我有一个类型的实例(通过反射创建),需要在泛型类的声明中使用它的类型.示例:

'其实是用反射创建的,不过是为了简单dim myObject as Foodim myGeneric as SomeGenericClass.GetAll(ofmyObject.getType)() '不起作用跨度>dim myGeneric as SomeGenericClass.GetAll(ofFoo)() 'works


在设计时我不会知道类的类型.它是在运行时从数据库中加载的.我正在使用反射来查找和创建正确类的实例,但我不能在泛型声明中使用它的类型.这甚至可能吗?我不想诉诸 Select 语句,因为该类有一百多种可能性,而且我们计划经常更改的类列表.

对于任何对结局感到好奇的人,该程序连接到 SQL Server,使用实体框架读取一个数据库,然后使用 CRM SDK 将该数据移动到 CRM Webapp(在查询方式上与实体框架非常相似)已创建).


更新

澄清一下:我正在使用实体框架从 SQL 数据库中获取数据,并使用 CRM SDK 连接到我们的 CRM 项目以将 SQL 数据库中的数据放入其中.我们基于 IRepository 创建了一个类.实体框架根据我们数据库中的表生成类和属性.此数据保存在存储库中.因此,如果我的 SQL 数据库有一个名为"Employee"的表,其中包含"ID"和"Name"两列,我将使用以下内容来获取有关该员工的信息.在此示例中,我们的存储库称为"SQLdata".

'获取所有员工dim emps as 列表(of 员工)= SQLdata.GetAll(of Employee)()'将员工写到控制台窗口for each curEmp as 员工 in empsconsole.writeLine("ID: " & curEmp.ID & " 名称:" & curEmp.Name)下一个


这很好用.现在假设您不知道您需要员工的信息.有一个字符串列表,其中包含"Employee.Name"、"Supervisor.Name"、"Project.ID"等.我必须加载这个列表,找出哪个实体框架类是匹配的,然后获取数据为了它.使用反射我已经能够上课了.但我不能在存储库的 GetAll() 方法中使用它.这就是我想做的:

'从我的反射代码创建的字典中获取类类型'接受一个字符串,返回字符串所代表的System.Typedim myType as System.Type = myTypeDictionary("跨度>雇员")'获取该类型的所有记录dim emps as 列表(of myType)= SQLdata.GetAll(of myType)()'确实不工作:(


上面的代码说"''myType'' is not defined."

请保存我的代码项目!我相信你的厉害!!

推荐答案

不知道你在追求什么

是不是你有一个例行程序让我们调用 if foobar ,它接受一个通用参数 t 并且你想在那个例行程序中创建一个 t 实例?

例如

 public sub foobar(of t)(byref 数据 as t)'这会创建一个变量,然后它将成为一个对象'类型为 t.dim myObject as object = activator.createinstance(gettype(t))end sub'你可以像这样从代码中的某个地方调用这个 rotinedim stringData as string = "西蒙"foob​​ar(字符串数据)

本文地址:https://www.itbaoku.cn/post/1394906.html